comando find / rename não funciona

4

Estou usando o Linux Slackware 14.0, bash 4.2. Suponha que eu tenha 2 arquivos no diretório:

bash-4.2$ ls
1.txt  2.txt

Eu quero renomeá-los para .svg. Esta resposta é aceita e votada em alta, então eu acho que deve funcionar . Ele usou esse comando:

find . -name "*.andnav" -exec rename -v 's/\.andnav$/\.tile/i' {} \;

Então, eu escrevi o comando análogo, mas ele imprimiu um erro:

bash-4.2$ find . -name "*.txt" -exec rename -v 's/\.txt$/\.svg/i' {} \;
rename: not enough arguments

Quando quero apenas imprimir os arquivos, funciona:

bash-4.2$ find . -name "*.txt" -print
./1.txt
./2.txt

Eu sei que posso renomear com uma abordagem mais simples:

bash-4.2$ rename .txt .svg ./*.txt
bash-4.2$ ls
1.svg  2.svg

Mas por que o comando de que responde não funciona para mim?

    
por user4035 07.06.2013 / 22:26

1 resposta

7

Existem dois comandos chamados rename nas distribuições do Linux. Existe um um dos utilitários básicos do Linux , que é usado assim:

rename SUBSTRING REPLACEMENT FILE...

Este comando substitui a primeira ocorrência de SUBSTRING por REPLACEMENT em cada um dos arquivos especificados. Ele suporta apenas strings simples, não curingas ou expressões regulares. No Debian e derivados (Ubuntu, Mint, etc.), este comando é chamado rename.ul . Em outras distribuições Linux, é chamado rename .

Existe também um script perl chamado rename que é usado assim :

rename 'PERL CODE' FILE...

Uma forma comum de código Perl é rename 's/REGEXP/REPLACEMENT/' FILE... , que substitui a primeira ocorrência de REGEXP por REPLACEMENT em cada nome de arquivo ( s/REGEXP/REPLACEMENT/g substitui todas as ocorrências).

O autor de a pergunta que você viu indicou que ele está concorrendo Ubuntu, por isso ele aceitou esta resposta usando o rename comando encontrado no Ubuntu.

O análogo para o comando padrão rename é

find . -name "*.txt" -exec rename .txt .svg {} \;

Com bash ≥4, você pode usar o ** padrão curinga depois de definir a globstar opção para corresponder arquivos em subdiretórios sem usando find .

shopt -s globstar
rename .txt .svg **/*.txt

Tenha em atenção que este comando rename actua na primeira cadeia, por isso, se tiver um ficheiro denominado hello.txt.world.txt , este será renomeado para hello.svg.world.txt .

    
por 08.06.2013 / 02:00

Tags