Я пытаюсь переименовать файл с помощью команды find
.
Я пытаюсь переименовать файл-a в файл-10.
Для этого я сначала попробовал следующую команду:
sps@sps-Inspiron-N5110:~$ find ~ -type f -name test-a -exec mv test-10 '{}' ';'
mv: cannot stat `test-10': No such file or directory
sps@sps-Inspiron-N5110:~$
Затем я попробовал ниже:
sps@sps-Inspiron-N5110:~$ find ~ -type f -name test-a -exec mv test-a test-10 '{}' ';'
mv: target `/home/sps/test-a' is not a directory
sps@sps-Inspiron-N5110:~$
Теперь я не могу думать, как это сделать с find
. Я пытаюсь сделать это с find
, потому что у меня будет много каталогов с тем же именем файла, и я хочу изменить все test-a
на test-10
в одной команде. Кто-нибудь, пожалуйста, предложите.
Спасибо.
Синтаксис mv
mv <source> <target>
, таким образом, заключительная команда, которая find
выполняется, должна быть похожей:
mv test-a test-10
Так, первое предположение было бы попыткой:
find ~ -type f -name test-a -exec mv {} test-10 \;
Однако это перестанет работать, с тех пор {}
расширен до полного пути, и mv
все еще выполняется в текущем каталоге, приводящем ко всем файлам, перемещаемым в Ваш текущий каталог и быть перезаписанным. Для предотвращения этого можно использовать -execdir
так, чтобы mv
был выполнен в каталоге, где файл был найден:
find ~ -type f -name test-a -execdir mv {} test-10 \;
Или, так как имя файла всегда является тем же:
find ~ -type f -name test-a -execdir mv test-a test-10 \;