Jak usunąć wiele (200 000) plików?

17

Muszę usunąć 200 000 plików (wszystkie) z folderu i nie chcę usuwać samego folderu.

przy użyciu rm pojawia się błąd „Zbyt długa lista argumentów”. Próbowałem coś zrobić z Xargsem, ale nie jestem facetem od powłoki, więc to nie działa:

find -name * | xargs rm -f
FMaz008
źródło
5
Dlaczego nie usunąć folderu i odtworzyć go po usunięciu?
garconcn

Odpowiedzi:

35
$ find /path/to/folder -type f -delete
kwanty
źródło
15
Prawdopodobnie warto wspomnieć, że narzędzie GNU find (używane przez większość dystrybucji Linuksa) może samodzielnie usuwać pliki -delete. Pozwala to również uniknąć problemów z plikami zawierającymi cytaty lub znaki nowej linii (chociaż można to -print0naprawić za pomocą -0opcji GNU find i GNU xarg ).
DerfK
3
@DerfK, fajna uwaga! Ponadto, wiele ppl ma tendencję do grania xargstymczasem findma -exec command {} +składnię.
poige
5

Robisz wszystko dobrze. Problem stanowi „*” (powłoka rozszerza go na listę plików zamiast find). Właściwą składnią może być:

cd <your_directory>; find . -type f | xargs rm -f
find <your_directory> -type f | xargs rm -f

(Ta ostatnia jest nieco mniej wydajna, ponieważ przekaże dłuższe nazwy xargs, ale prawie nie zauważysz :-))

Alternatywnie możesz uciec przed swoim „*” w ten sposób (jednak w takim przypadku spróbuje również usunąć „.” I „..”; to nie jest biggie - dostaniesz tylko małe ostrzeżenie :-)):

find . -name '*' | xargs rm -f
find . -name "*" | xargs rm -f
find . -name \* | xargs rm -f

Jeśli nazwy plików zawierają spacje, użyj tego:

find . -type f -print0 | xargs -0 rm -f
dtoubelis
źródło
1
To nie działa, jeśli masz nazwę pliku zawierającą spację.
user9517
@lain: Tak, właśnie edytowałem moją odpowiedź, aby uwzględnić sztuczkę dla białych
znaków
3

Następujące polecenie usunie wszystkie pliki z bieżącego katalogu:

find . -type f -exec rm {} \;
George Tasioulis
źródło
2
-name '*'nie oznacza „wszystkich plików”. Pliki są mówione z:-type f
poige
2

możesz spróbować

find /path/to/folder -type f -print0  | xargs -0 rm -f

lub

find /path/to/folder -type f -exec rm -f "{}" +
użytkownik9517
źródło
1

Wyrazy uznania dla odpowiedzi ilościowych, oto kilka dodatków.

Jeśli chcesz usunąć pliki z określonym wzorcem nazwy, możesz to zapisać w ten sposób. Dodano także opcję -print, dzięki czemu można zobaczyć, co się dzieje, gdy pliki są usuwane.

sudo find /home/mydirectory -name "*.jpg" -type f -print -delete

Spowoduje to na przykład usunięcie wszystkich plików JPEG w moim katalogu.

Waltur Buerk
źródło