2013-02-06 18 views
80

Mam katalog plików dziennika, który zawiera 82000 plików i katalogów (około półtorej).Jak usunąć wszystkie pliki starsze niż 3 dni, gdy "Lista argumentów jest zbyt długa"?

Potrzebuję usunąć wszystkie pliki i katalogi starsze niż 3 dni.

W katalogu, który ma 37000 plików w nim, udało mi się zrobić to z:

find * -mtime +3 -exec rm {} \; 

Ale z 82000 plików/katalogów, otrzymuję błąd:

/usr/bin/find: Argument list too long

Jak czy mogę obejść ten błąd, aby usunąć wszystkie pliki/katalogi starsze niż 3 dni?

+1

Czy próbowałeś 'find -mtime +3 -exec rm {} +'? –

+1

Wierzę, że uruchomienie 'find * -mtime +3 | xargs rm' rozwiąże ten problem. –

+6

Myślę, że jedynym problemem jest 'find *'. 'find .' jest lepsze. Globalizacja powłoki z rozszerzeniem '*' do ogromnej listy plików i katalogów. –

Odpowiedz

113

usunąć wszystkie pliki i katalogów w katalogu prąd:

find . -mtime +3 | xargs rm -Rf 

Lub alternatywnie, bardziej zgodne z pierwotnym poleceniem OP:

find . -mtime +3 -exec rm -Rf -- {} \; 
+21

-1 Problem jest gwiazdą w "find *", rozwiązałeś ją, używając "find". zamiast. Xargs wprowadza w błąd. –

+7

@AleksandrLevchuk rozwiązuje problem z OP, dlatego też nie zasługuje na awans. – hd1

+9

Pytanie: "znajdź * -mtime +3 -exec rm {} \;" daje zbyt długą listę argumentów. Odpowiedź: Użyj "find. -mtime +3 -exec rm {} \;" –

53

mogą również korzystać z:

find . -mindepth 1 -mtime +3 -delete 

Aby nie usuwać katalogu docelowego

+3

Najlepsza odpowiedź, znacznie czystsza niż wywołanie rm (i prawdopodobnie bezpieczniejsze). Działa również dla podkatalogów. – basic6

10

Kolejne rozwiązanie pierwotnego pytania, szczególnie w języku angielskim. przydatna, gdy chcesz usunąć tylko niektóre ze starszych plików w folderze byłoby smth tak:

find . -name "*.sess" -mtime +100 

i tak dalej .. Cytaty zablokować kwantyfikatorów powłoki, dzięki czemu można „znaleźć” miliony plików:)

Powiązane problemy