将 date/timestamp 附加到现有文件
Append date/timestamp to existing files
目录中的文件很少。我想根据通配符条件找到所有文件,然后通过使用单行命令
向其附加日期或时间戳字段来重命名它
示例:
foo1.txt
foo1.log
foo2.txt
foo2.log
我想找到所有 .log 文件并通过向其附加日期字段来重命名它们
预期输出:
foo1.txt
foo1_20210609.log
foo2.txt
foo2_20210609.log
ls | perl -lne '$date=`date '+%Y%m%d'`; chomp($date); `mv $_ $_$date`;'
- 获取文件
- 将其通过管道传输到 perl 脚本中
- e 选项在行
中执行
- n 选项将输入拆分为行
- l 选项为每个添加新行
back ticks 执行 unix 命令
我会在通配符匹配列表上使用“for”循环,然后使用参数扩展和命令替换来拼接其余部分:
for file in *.log
do
echo mv -- "$file" "${file%.log}_$(date +%Y%m%d).log"
done
中间的碎片分解为:
mv --
-- 调用“mv”并明确告诉它没有更多选项;这将我们与可能以 -i
开头的文件名隔离开来,例如
"${file%.log}
-- 扩展“$file”变量并从末尾删除“.log”
_
-- 只是在我们想要的地方添加下划线
$(date +%Y%m%d)
-- 调用 date
命令并插入结果输出
.log
-- 只是在末尾添加“.log”部分
如果您喜欢结果命令,请删除“回声”。
如果您想要静态时间戳,则只需使用该文本代替整个 $(date ...)
命令替换。
在您的示例输入中,但使用今天的日期,输出为:
mv -- foo1.log foo1_20210610.log
mv -- foo2.log foo2_20210610.log
目录中的文件很少。我想根据通配符条件找到所有文件,然后通过使用单行命令
向其附加日期或时间戳字段来重命名它示例: foo1.txt foo1.log foo2.txt foo2.log
我想找到所有 .log 文件并通过向其附加日期字段来重命名它们
预期输出: foo1.txt foo1_20210609.log foo2.txt foo2_20210609.log
ls | perl -lne '$date=`date '+%Y%m%d'`; chomp($date); `mv $_ $_$date`;'
- 获取文件
- 将其通过管道传输到 perl 脚本中
- e 选项在行 中执行
- n 选项将输入拆分为行
- l 选项为每个添加新行
back ticks 执行 unix 命令
我会在通配符匹配列表上使用“for”循环,然后使用参数扩展和命令替换来拼接其余部分:
for file in *.log
do
echo mv -- "$file" "${file%.log}_$(date +%Y%m%d).log"
done
中间的碎片分解为:
mv --
-- 调用“mv”并明确告诉它没有更多选项;这将我们与可能以-i
开头的文件名隔离开来,例如"${file%.log}
-- 扩展“$file”变量并从末尾删除“.log”_
-- 只是在我们想要的地方添加下划线$(date +%Y%m%d)
-- 调用date
命令并插入结果输出.log
-- 只是在末尾添加“.log”部分
如果您喜欢结果命令,请删除“回声”。
如果您想要静态时间戳,则只需使用该文本代替整个 $(date ...)
命令替换。
在您的示例输入中,但使用今天的日期,输出为:
mv -- foo1.log foo1_20210610.log
mv -- foo2.log foo2_20210610.log