Estou tentando renomear um arquivo usando find
o 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-a
para test-10
em um comando. Alguém por favor sugira.
Obrigado.
Responder1
A sintaxe de mv
is mv <source> <target>
, então o comando final find
executado 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 mv
ainda é 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 -execdir
so que mv
seja 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 \;