Tentando alterar as extensões de vários arquivos

1

Usando a linha de comando (no Fedora) eu gostaria de renomear todos os arquivos no diretório atual, que tem "foo" para a extensão, com o mesmo nome mas com foo1 para a extensão.

Eu tentei vários exemplos encontrados no StackExchange:

rename foo foo1 *.foo

e

find . -name '*.foo' -execdir rename 's/\.foo$/.foo1/' \{} \;

Ambos geram o seguinte erro várias vezes:

rename: not enough arguments

Qualquer ideia apreciada.

    
por mike65535 10.08.2018 / 21:19

3 respostas

1

Seu uso de rename pode não funcionar em todos os lugares. Outra maneira de conseguir isso é usar find , mv e alguma substituição de bash.

find . -name '*.foo' -exec bash -c 'mv "$0" "${0%.foo}.foo1"' "{}" \;

Algumas coisas a serem observadas:

Eu uso -exec e não -execdir . O último efetivamente cd s para o diretório do arquivo correspondente (que não é o que você deseja, porque o caminho para o arquivo - que será relativo a . - não estará mais correto). Você deseja apenas -exec , que executará o comando especificado para cada arquivo que corresponda a -name '*.foo' (substituindo {} pelo caminho do arquivo correspondente).

"${0%.foo}" retira a extensão .foo , por isso, se $0 for "hello.foo" , então "${0%.foo}" será igual a "hello" . Em seguida, adicionar .foo1 ao final apenas acrescenta isso, então "${0%.foo}.foo1" é "hello.foo1" .

    
por 10.08.2018 / 21:36
1

Use um for loop

for f in *.foo
do
    mv $f ${f/.foo/.foo1}
done
    
por 10.08.2018 / 22:16
0

Adicionando um 1 ao nome de todos os arquivos cujo nome originalmente termina com .foo :

find . -type f -name '*.foo' -exec mv -i {} {}1 ';'
    
por 24.10.2018 / 14:28

Tags