Bash:如何使用触摸和正则表达式复制时间戳?

Bash:如何使用触摸和正则表达式复制时间戳?

由于这更像是一个 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 \;

相关内容