Usando a renomeação do perl:
find . -depth -type f -exec rename 's@(?<!\.)/@_@g' -- {} \;
OUTPUT
$ find -type f
./foo2_bar4 whit a space.txt
./foo3_qux1_bar6.txt
./foo2_bar3.txt
./foo3_qux1_bar5.txt
./foo1_bar2.txt
./foo1_bar1.txt
NOTA
aviso http://pix.toile-libre.org/upload/original/1377510865.png Existem outras ferramentas com o mesmo nome que podem ou não ser capazes de fazer isso, então seja cuidadoso.
Se você executar o seguinte comando ( GNU
)
$ file "$(readlink -f "$(type -p rename)")"
e você tem um resultado como
.../rename: Perl script, ASCII text executable
e não contendo:
ELF
então esta parece ser a ferramenta certa =)
Se não, para torná-lo o padrão (normalmente já é o caso) em Debian
e derivado como Ubuntu
:
$ sudo update-alternatives --set rename /path/to/rename
(substitua /path/to/rename
pelo caminho do comando perl's rename
.
Se você não tiver esse comando, pesquise seu gerenciador de pacotes para instalá-lo ou faça isso manualmente
Por último, mas não menos importante, esta ferramenta foi originalmente escrita por Larry Wall, o pai do Perl.