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

use*_*487 3 bash regex timestamp

由于这更像是一个 Bash 问题,我认为这比超级用户更适合服务器故障,即使我在谈论媒体文件。

我不得不对几个媒体文件进行批量转换,所有输出文件都有一个新的时间戳。

/somedir/
    file1.mpg     (correct timestamp)
    file1.mpg.m4v (wrong timestamp)
    file2.mpg     (correct timestamp)
    file2.mpg.m4v (wrong timestamp)
    ...
Run Code Online (Sandbox Code Playgroud)

我想要做的是时间戳的批处理副本,以便每个 *.mpg.m4v 获得相应 *.mpg 文件的时间戳。

从我的搜索来看,看起来我需要使用touch -r一些带有替换的正则表达式来处理这个问题。

我是否在正确的轨道上,是否有人对我需要如何做正则表达式(我的正则表达式知识,不好,不好,不好)有什么建议来处理这个问题?

rap*_*ink 7

来看看怎么样...

for f in *.mpg; do
   touch -r "$f" "${f}.m4v"
done
Run Code Online (Sandbox Code Playgroud)

不需要正则表达式,只需从右侧解决问题。循环遍历 *.mpg 并将 .m4v 添加到它们比相反要容易得多,尽管您也可以在没有正则表达式的情况下以另一种方式编写它(只是为了好玩):

for f in *.m4v; do
   touch -r "${f%\.m4v}" "$f"
done
Run Code Online (Sandbox Code Playgroud)

如果你想用一个命令完成它,你可以用find(为了安全将它限制在一个级别):

find . -maxdepth 1 -name '*.mpg' -exec touch -r {} {}.m4v \;
Run Code Online (Sandbox Code Playgroud)