Se o nome do arquivo não contiver test
, você está movendo sobre ele mesmo (como em mv . ./.
). Emite o erro, mas não muda nada. Arquivos com test
em seus nomes são renomeados corretamente.
Dado o seguinte diretório:
[~/test]find .
.
./something_else.txt
./univision.rbw
./something_else.rb
./testtest
./testtest/weewee.rb
./testtest/weewee.txt
./univision.rb
A execução do seguinte comando sed gera muitos erros mv
:
[~/test]for i in $( find . ); do mv $i 'echo $i | sed s/test/this_is_not_a_test/g'; done;
mv: ‘.’ and ‘./.’ are the same file
mv: ‘./something_else.txt’ and ‘./something_else.txt’ are the same file
mv: ‘./univision.rbw’ and ‘./univision.rbw’ are the same file
mv: ‘./something_else.rb’ and ‘./something_else.rb’ are the same file
mv: cannot stat ‘./testtest/weewee.rb’: No such file or directory
mv: cannot stat ‘./testtest/weewee.txt’: No such file or directory
mv: ‘./univision.rb’ and ‘./univision.rb’ are the same file
mas também "funciona"
[~/test]find .
.
./something_else.txt
./univision.rbw
./something_else.rb
./this_is_not_a_testthis_is_not_a_test
./this_is_not_a_testthis_is_not_a_test/weewee.rb
./this_is_not_a_testthis_is_not_a_test/weewee.txt
./univision.rb
O que estou perdendo aqui?
Se o nome do arquivo não contiver test
, você está movendo sobre ele mesmo (como em mv . ./.
). Emite o erro, mas não muda nada. Arquivos com test
em seus nomes são renomeados corretamente.
Primeiro, renomeie o diretório ./testtest
para ./this_is_not_a_testthis_is_not_a_test
e, em seguida, avance para renomeá-lo. ./testtest/weewee.rb
falhará porque esse arquivo não está mais lá. Você deve usar a opção -depth
do find para processar as entradas no diretório primeiro e o próprio diretório como a última etapa.