由于这更像是一个 Bash 问题,所以我认为这更适合 serverfault 而不是超级用户,尽管我正在谈论媒体文件。
我必须对几个媒体文件进行批量转换,并且所有输出文件都有一个新的时间戳。
/somedir/
file1.mpg (correct timestamp)
file1.mpg.m4v (wrong timestamp)
file2.mpg (correct timestamp)
file2.mpg.m4v (wrong timestamp)
...
我想要做的是批量复制时间戳,以便每个 *.mpg.m4v 都能获得相应 *.mpg 文件的时间戳。
从我的搜索来看,我似乎需要使用touch -r
一些带有替换的正则表达式来处理这个问题。
我走在正确的轨道上吗?有没有人对我需要如何使用正则表达式(我的正则表达式知识很糟糕,很糟糕,很糟糕)来处理这个问题有什么建议?
答案1
让我们看看,怎么样...
for f in *.mpg; do
touch -r "$f" "${f}.m4v"
done
不需要正则表达式,只需从右侧解决问题即可。循环遍历 *.mpg 并向其添加 .m4v 比相反的做法要容易得多,尽管您也可以用另一种方式编写它,而无需正则表达式(只是为了好玩):
for f in *.m4v; do
touch -r "${f%\.m4v}" "$f"
done
如果您希望使用一个命令完成此操作,则可以这样做find
(为了安全起见将其限制在一个级别):
find . -maxdepth 1 -name '*.mpg' -exec touch -r {} {}.m4v \;