Я пытаюсь переименовать файл с помощью find
команды.
Я пытаюсь переименовать file-a в file-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
одной командой. Кто-нибудь, пожалуйста, предложите.
Спасибо.
решение1
Синтаксис — 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 \;