Como faço para excluir todos os arquivos com um determinado nome em todos os subdiretórios?

25

Quero excluir todos os arquivos com um determinado nome em todos os subdiretórios do meu diretório pessoal.

Eu tentei:

rm -r file

no meu diretório pessoal, mas não funcionou porque esse arquivo não existe nesse diretório.

oadams
fonte

Respostas:

36

find . -name "filename" -delete

tante
fonte
12

como uma elaboração da resposta do @ tante, convém garantir que a lista de arquivos usada esteja correta antes de excluir esses arquivos:

find <source_dir> -name <filename> -print

se a inspeção mostra uma lista válida,

find <source_dir> -name <filename> -delete

outra opção, se você desejar isso em muitos diretórios usando um diretório temporário:

mkdir <dest_dir>
for i in <list_of_directories>
do
  find "$i" -name <filename> -exec /bin/mv {} <dest_dir>
done

# check dest_dir
ls dest_dir
rm -rf <dest_dir>

Como sempre, garanta a precisão de qualquer script antes da execução e sempre tenha um backup pronto, caso algo dê errado.

Wayne
fonte
3
sempre coloque aspas duplas em torno das substituições de variáveis, ou seu comando não funcionará com nomes de arquivos que contenham certos caracteres especiais (espaço em branco, curingas e barras invertidas).
Gilles 'SO- stop be evil' em
@Gilles - Sim, obrigado por atualizar e garantir que esta resposta esteja correta.
Wayne