Por que estou recebendo erros de mv com este comando sed?

0

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?

    
por dax 29.04.2015 / 14:18

2 respostas

1

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.

    
por 29.04.2015 / 14:24
0

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.

    
por 29.04.2015 / 15:44

Tags