Como renomear um arquivo usando o comando find

Como renomear um arquivo usando o comando find

Estou tentando renomear um arquivo usando findo comando.

Estou tentando renomear o arquivo-a para arquivo-10.

Para fazer isso, tentei primeiro o comando abaixo:

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:~$

Então tentei abaixo:

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:~$

Agora não consigo pensar em como fazer isso com find. Estou tentando fazer isso com find, porque terei muitos diretórios com o mesmo nome de arquivo e quero alterar todos test-apara test-10em um comando. Alguém por favor sugira.

Obrigado.

Responder1

A sintaxe de mvis mv <source> <target>, então o comando final findexecutado deve ser semelhante a:

mv test-a test-10 

Então, o primeiro palpite seria tentar:

find ~ -type f -name test-a -exec mv {} test-10 \;

No entanto, isso falhará, pois {}é expandido para o caminho completo e mvainda é executado no diretório atual, resultando na movimentação de todos os arquivos para o diretório atual e na substituição. Para evitar isso, você pode usar -execdirso que mvseja executado no diretório onde o arquivo foi encontrado:

find ~ -type f -name test-a -execdir mv {} test-10 \;

Ou, como o nome do arquivo é sempre o mesmo:

find ~ -type f -name test-a -execdir mv test-a test-10 \;

informação relacionada