Bash: Como copiar timestamps usando touch e regex?

3

Como isso é mais uma questão de Bash, acho que isso é mais adequado para serverfault do que para superusuário, mesmo que eu esteja falando sobre arquivos de mídia.

Eu tive que fazer uma conversão em lote de vários arquivos de mídia, e todos os arquivos de saída têm um novo timestamp.

/somedir/
    file1.mpg     (correct timestamp)
    file1.mpg.m4v (wrong timestamp)
    file2.mpg     (correct timestamp)
    file2.mpg.m4v (wrong timestamp)
    ...

O que eu quero fazer é uma cópia em lote dos timestamps para que cada * .mpg.m4v receba o timestamp do arquivo * .mpg correspondente.

Da minha pesquisa, parece que preciso usar touch -r e alguma regex com substituição para lidar com isso.

Estou no caminho certo, e alguém tem alguma sugestão de como eu preciso fazer o regex (meu conhecimento de regex, é ruim, ruim, ruim) para lidar com isso?

    
por user52487 27.08.2010 / 00:30

1 resposta

7

Vamos ver, que tal ...

for f in *.mpg; do
   touch -r "$f" "${f}.m4v"
done

Não há necessidade de expressões regulares, apenas para tirar o problema do lado direito. É muito mais fácil circular através de * .mpg e adicionar .m4v a eles do que o contrário, embora você também possa escrevê-lo de outra maneira sem regexps (apenas por diversão):

for f in *.m4v; do
   touch -r "${f%\.m4v}" "$f"
done

Se você quer que seja feito com um comando, você pode fazer isso com find (restringindo-o a um nível para segurança):

find . -maxdepth 1 -name '*.mpg' -exec touch -r {} {}.m4v \;
    
por 27.08.2010 / 00:45