Jak usunąć wszystkie pliki o podanej nazwie we wszystkich podkatalogach?

25

Chcę usunąć wszystkie pliki o podanej nazwie we wszystkich podkatalogach mojego katalogu domowego.

Próbowałem:

rm -r file

w moim katalogu domowym, ale to nie działało, ponieważ ten plik nie istnieje w tym katalogu.

oadams
źródło

Odpowiedzi:

36

find . -name "filename" -delete

tante
źródło
12

jako rozwinięcie odpowiedzi @ tante, możesz upewnić się, że lista plików jest poprawna przed usunięciem tych plików:

find <source_dir> -name <filename> -print

jeśli kontrola wykaże prawidłową listę, to

find <source_dir> -name <filename> -delete

inna opcja, jeśli chce się tego w wielu katalogach korzystających z tymczasowego katalogu przechowywania:

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>

Jak zawsze, przed wykonaniem upewnij się, że wszystkie skrypty są dokładne, i zawsze przygotuj kopię zapasową na wypadek, gdyby coś poszło nie tak.

Wayne
źródło
3
zawsze umieszczaj podwójne cudzysłowy wokół podstawień zmiennych, w przeciwnym razie twoje polecenie nie będzie działać z nazwami plików zawierającymi pewne znaki specjalne (białe znaki, symbole wieloznaczne i ukośniki odwrotne).
Gilles „SO- przestań być zły”
@Gilles - Tak, dziękuję za aktualizację i upewnienie się, że odpowiedź była poprawna.
Wayne,