comando bash para cada arquivo em uma pasta

15

Eu tenho um conjunto de arquivos nos quais gostaria de aplicar o mesmo comando e a saída deve conter o mesmo nome do arquivo processado, mas com uma extensão diferente.

Atualmente estou renomeando /my/data/Andrew.doc para /my/data/Andrew.txt Eu gostaria de fazer isso para todos os arquivos .doc da pasta / my / data / e preservar o nome .

Eu tentei várias versões, mas acho que tenho algo errado na sintaxe como um novo no linux.

    
por Robert 02.07.2013 / 11:12

2 respostas

45

Existem pelo menos cem mil milhões de formas diferentes de abordar isto, mas aqui estão os principais candidatos:

O Bash para loop

for f in *.doc; do
    # do some stuff here with "$f"
    # remember to quote it or spaces may misbehave
done

Usando find

O comando find tem um lindo e lindo comando exec que é ótimo para executar coisas (com algumas advertências). Find is better than basic globbing, porque você pode realmente filtrar os arquivos que você está selecionando. Tenha cuidado com a sintaxe ímpar.

find . -iname '*.doc' -exec echo "File is {}" \;

Se estamos apenas renomeando doc para txt ...

O comando rename é sed-like na pesquisa. Obviamente, isso não fará nada para converter o formato.

rename 's/doc$/txt/' *.doc
    
por Oli 02.07.2013 / 11:24
13
for i in *.doc ; do mv "$i" $(echo $i | sed s/doc/txt/) ; done
    
por DIRAVI 02.07.2013 / 11:36