cp não avaliando o dirname corretamente na operação find [duplicada]

2

Estou tentando criar um script que encontre arquivos de um determinado nome de arquivo, copie um arquivo para o local desse arquivo e exclua o arquivo encontrado.

Ignorando a parte de exclusão por enquanto, é o que eu tenho até agora:

find /path/to/searchdir -name "file.rtf" -exec cp -v "/path/to/filetocopy.rtf" 'dirname {}' \;

Infelizmente, parece que não consigo avaliar o dirname corretamente, já que ele retorna "." para qualquer instância do arquivo que encontrar.

Tenho certeza de que é algo simples, mas ainda sou iniciante no que diz respeito a scripts bash, então não sei por quê. Eu tentei várias variações do acima, mas sem sucesso.

    
por user2509899 24.01.2017 / 22:31

1 resposta

3

A ação find do -execdir parece mais apropriada:

find /path/to/searchdir -name file.rtf -execdir cp -v /path/to/filetocopy.rtf . \;

Isso executará o cp de cada diretório encontrado contendo um arquivo chamado file.rtf , portanto, . , visto por cp , será o diretório apropriado toda vez que cp for executado.

Você pode adicionar -delete para excluir o arquivo (depois de verificar se tudo funciona).

O motivo pelo qual sua abordagem não está funcionando é que o shell avalia dirname {} antes de executar find e dirname {} outputs . . Então

find /path/to/searchdir -name "file.rtf" -exec cp -v "/path/to/filetocopy.rtf" 'dirname {}' \;

torna-se

find /path/to/searchdir -name "file.rtf" -exec cp -v "/path/to/filetocopy.rtf" . \;
    
por 24.01.2017 / 22:51