Как переименовать файл с помощью команды find

Как переименовать файл с помощью команды find

Я пытаюсь переименовать файл с помощью 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 \;

Связанный контент