Um útil é rename .tgz .tar.gz *.tgz
Como eu renomeio todos os arquivos no diretório atual com uma extensão de .tgz para .tar.gz? Eu tentei
find . -iname *.tgz --exec mv {} {}.tar.gz \;
mas não funciona como esperado.
Um útil é rename .tgz .tar.gz *.tgz
ls *.tgz | sed 's/\(.*\).tgz$/mv "&" ".tar.gz"/' | sh
for i in *.tgz; do mv "$i" "${i/.tgz}".tar.gz; done
rename
é legal. Mas você deve tomar cuidado com os derivados do Debian - eles não fornecem a mesma versão que outras distribuições.
Debian / Ubuntu / amigos:
# rename 's/\.tgz$/\.tar.gz/ *.tgz
Todo mundo, até onde eu sei - link
# rename .tgz .tar.gz *.tgz
Você pode precisar fazer algo assim:
[rilindo@kvm0001 bar]$ ls -la
total 8
drwxr-xr-x. 2 rilindo cgred 4096 Oct 20 23:16 .
drwxr-xr-x. 8 rilindo cgred 4096 Oct 20 23:10 ..
-rw-r--r--. 1 rilindo cgred 0 Oct 20 23:15 bar.txt
-rw-r--r--. 1 rilindo cgred 0 Oct 20 23:15 baz.txt
-rw-r--r--. 1 rilindo cgred 0 Oct 20 23:16 foo.txt
[rilindo@kvm0001 bar]$ for i in 'find . -type f -iname "*.txt"'; do j='echo $i | sed 's/.txt$/.doc/''; mv $i $j; done
[rilindo@kvm0001 bar]$ ls -la
total 8
drwxr-xr-x. 2 rilindo cgred 4096 Oct 20 23:16 .
drwxr-xr-x. 8 rilindo cgred 4096 Oct 20 23:10 ..
-rw-r--r--. 1 rilindo cgred 0 Oct 20 23:15 bar.doc
-rw-r--r--. 1 rilindo cgred 0 Oct 20 23:15 baz.doc
-rw-r--r--. 1 rilindo cgred 0 Oct 20 23:16 foo.doc
[rilindo@kvm0001 bar]$
Então, com esta string de comando:
for i in 'find . -type f -iname "*.txt"'; do j='echo $i | sed 's/.txt$/.doc/''; mv $i $j; done
Eu recebo a lista de arquivos e para cada elemento, atribuo o nome do arquivo com uma nova extensão para uma variável e renomeio cada arquivo para essa variável.
Este, é claro, provavelmente não é um roteiro perfeito, mas eu acho que você entendeu a idéia.
Eu recomendo 'mmv'. Muito simples e menos propensa a erros do que 'for' expressões.