Учитывая следующий каталог:

[~/test]find .
.
./something_else.txt
./univision.rbw
./something_else.rb
./testtest
./testtest/weewee.rb
./testtest/weewee.txt
./univision.rb

Выполнение следующей команды sed генерирует много ошибок 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

но это также «работает»

[~/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

Что мне здесь не хватает?

2 ответа2

1

Если имя файла не содержит test , вы перемещаете его над собой (как в mv . ./.). Выдает ошибку, но ничего не меняет. Файлы с test в их именах переименованы правильно.

0

Сначала переименуйте каталог ./testtest в ./this_is_not_a_testthis_is_not_a_test а затем дополнительные attepts переименовать , например ./testtest/weewee.rb потерпит неудачу , потому что файл больше не существует. Вы должны использовать опцию find -depth чтобы сначала обрабатывать записи в каталоге, а сам каталог как последний шаг.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .