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.

Odpowiedzi:



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.


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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.