Como posso executar um comando em todos os arquivos em um determinado diretório?

0

Estou usando mp4box para mover os átomos MOOV em arquivos MP4.

O problema é que terei 6 arquivos em uma determinada pasta e não quero executar o comando inter 500 seis vezes separadas.

É possível fazer algo como mp4box -inter 500 * em um diretório para que o comando seja executado em todos os arquivos mp4 nessa pasta?

    
por usr122212 22.01.2013 / 17:58

1 resposta

5

Você pode usar a opção -exec de find . Aqui, '{}' é substituído pelo nome do arquivo de cada arquivo MP4. Isso lidará com todos os tipos de nomes de arquivos, mesmo aqueles que contenham espaços ou novas linhas. Você precisa fornecer -maxdepth 1 para pesquisar apenas o diretório atual.

find . -iname "*.mp4" -maxdepth 1 -exec mp4box -inter 500 '{}' \;

Uma maneira alternativa e mais complicada envolveria a saída de find em um loop com read . Aqui, cada arquivo é delimitado pelo caractere NUL e você precisa informar read para dividir a entrada nesse caractere, o que é obtido por -d '' . Você também precisa citar a variável "$file" , de modo que espaços ou caracteres globbing no nome sejam mantidos.

find . -iname "*.mp4" -maxdepth 1 -print0 | while IFS= read -d '' -r file; do mp4box -inter 500 "$file"; done
    
por 22.01.2013 / 18:10