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.