Поскольку это скорее вопрос Bash, я думаю, что он лучше подходит для serverfault, чем superuser, хотя я говорю о медиафайлах.
Мне пришлось выполнить пакетное преобразование нескольких файлов мультимедиа, и все выходные файлы имеют новую метку времени.
/somedir/
file1.mpg (correct timestamp)
file1.mpg.m4v (wrong timestamp)
file2.mpg (correct timestamp)
file2.mpg.m4v (wrong timestamp)
...
Я хочу сделать пакетную копию меток времени, чтобы каждый * .mpg.m4v получал метку времени соответствующего файла * .mpg.
Судя по моим поискам, мне нужно использовать touch -r
и некоторое регулярное выражение с заменой, чтобы справиться с этим.
Я на правильном пути, и есть ли у кого-нибудь предложения о том, как мне нужно делать регулярное выражение (мои знания регулярных выражений плохие, плохие, плохие), чтобы справиться с этим?
Посмотрим, как насчет ...
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 \;