由于这是更多的Bash问题,我认为这是比超级用户更适合serverfault,即使我正在谈论媒体文件。
我不得不对多个媒体文件进行批量转换,并且所有的输出文件都有一个新的时间戳。
/somedir/ file1.mpg (correct timestamp) file1.mpg.m4v (wrong timestamp) file2.mpg (correct timestamp) file2.mpg.m4v (wrong timestamp) ...
我想要做的是时间戳的批处理副本,以便每个* .mpg.m4v获得相应的* .mpg文件的时间戳。
从我的search,看起来像我需要使用touch -r和一些正则expression式来处理这个。
我在正确的轨道上,有没有人有任何build议,我需要做正则expression式(我的正则expression式知识,坏,坏,坏)来处理这个?
我们来看看,怎么样
for f in *.mpg; do touch -r "$f" "${f}.m4v" done
不需要正则expression式,只是为了从右侧解决问题。 绕过* .mpg并添加.m4v给它们比反过来要容易得多,尽pipe你也可以不用regexps来写它(仅仅为了好玩):
for f in *.m4v; do touch -r "${f%\.m4v}" "$f" done
如果你想用一个命令来完成,你可以用find (为了安全起见将它限制在一个级别):
find . -maxdepth 1 -name '*.mpg' -exec touch -r {} {}.m4v \;