用一组文件中的当前时间戳替换旧时间戳
Replace old timestamp with current timestamp in set of files
我有一些文件驻留在目录中:
TESTRP_20201126220042.TAB
TESTRP_20201214145845.TAB
TESTRP_20210201145846.TAB
TESTRP_20210304134849.TAB
这里我需要用当前时间戳日期替换旧时间戳+%Y%m%d%H%M%S
我试过运行下面的代码:
find . -type f -name '*TESTRP_*' -exec sh -c '
now=$(date '+%Y%m%d%H%M%S')
for pathname do
mv "$pathname" "${TESTRP}_$now.TAB"
done' sh {} +
但它给了我一个输出文件 _20210630083729.TAB
而不是三个具有更新时间戳的文件。
也许像
shopt -s extglob # Turn on bash extended globbing if not already enabled
for file in TESTRP_+([0-9]).TAB; do
mv "$file" "${file/+([0-9])/$(date '+%Y%m%d%H%M%S')}"
sleep 1
done
应该每秒重命名一个文件。或者,在时间戳后添加一个计数器并在每个文件上递增它:
shopt -s extglob
now=$(date '+%Y%m%d%H%M%S')
declare -i fileno=0
for file in TESTRP_+([0-9]).TAB; do
newts=$(printf "%s%04d" "$now" "$fileno")
mv "$file" "${file/+([0-9])/$newts}"
((fileno++))
done
或者看起来 date
的某些版本具有纳秒的 %N
格式,这在 date '+%Y%m%d%H%M%S%N'
[=15= 的任何两次调用中不应导致相同的时间戳]
我有一些文件驻留在目录中:
TESTRP_20201126220042.TAB
TESTRP_20201214145845.TAB
TESTRP_20210201145846.TAB
TESTRP_20210304134849.TAB
这里我需要用当前时间戳日期替换旧时间戳+%Y%m%d%H%M%S
我试过运行下面的代码:
find . -type f -name '*TESTRP_*' -exec sh -c '
now=$(date '+%Y%m%d%H%M%S')
for pathname do
mv "$pathname" "${TESTRP}_$now.TAB"
done' sh {} +
但它给了我一个输出文件 _20210630083729.TAB
而不是三个具有更新时间戳的文件。
也许像
shopt -s extglob # Turn on bash extended globbing if not already enabled
for file in TESTRP_+([0-9]).TAB; do
mv "$file" "${file/+([0-9])/$(date '+%Y%m%d%H%M%S')}"
sleep 1
done
应该每秒重命名一个文件。或者,在时间戳后添加一个计数器并在每个文件上递增它:
shopt -s extglob
now=$(date '+%Y%m%d%H%M%S')
declare -i fileno=0
for file in TESTRP_+([0-9]).TAB; do
newts=$(printf "%s%04d" "$now" "$fileno")
mv "$file" "${file/+([0-9])/$newts}"
((fileno++))
done
或者看起来 date
的某些版本具有纳秒的 %N
格式,这在 date '+%Y%m%d%H%M%S%N'
[=15= 的任何两次调用中不应导致相同的时间戳]