O código abaixo pesquisará não apenas o diretório old
, mas também seus subdiretórios e excluirá os arquivos do diretório new
que tem o mesmo nome e caminho. Isso funcionará com todos os nomes de arquivos hostis (espaços, novas linhas, etc):
cd /folder/files/data/old || { echo "Failed to get in correct directory" ; exit 1 ; }
find . -type f -exec rm -f ../new/{} \;
O argumento -type f
indica find
para procurar por arquivos, não por diretórios. O argumento -exec ... \;
informa find
que, depois de encontrar um arquivo em old
, deve executar o comando rm -f
em sua contraparte no subdiretório new
.
Como rm
recebe a opção -f
, ele ignorará silenciosamente os arquivos que não existem. Isso elimina a necessidade de testar a existência do arquivo em new
antes de tentar excluí-lo. Além disso, ele não será avisado antes de excluir arquivos. Isso é muito útil ao excluir um grande número de arquivos. No entanto, certifique-se de que realmente deseja excluir os arquivos antes de executar este script . Para proteção, o script sairá com um erro com um erro se o comando cd
falhar.