Znalazłem polecenie usunięcia plików starszych niż 5 dni w folderze
find /path/to/files* -mtime +5 -exec rm {} \;
Ale jak to zrobić dla podkatalogów w tym folderze?
files
find
rm
timestamps
Teddy291
źródło
źródło
find /path/to -type d -empty -delete
rm test one
. (Który usunie plik o nazwie „test” i plik o nazwie „jeden”, ale nie plik o nazwie „test jeden”). Podpowiedź: -delete or -print0find
aby uniknąć problemów ze znakami specjalnymi, jak wspomniano w pierwszym wierszu odpowiedzi. Np .:find /path/to/files/ -exec somecommand '{}' \;
Odpowiedzi:
Uważaj na specjalne nazwy plików (spacje, cudzysłowy) podczas przesyłania do rm.
Istnieje bezpieczna alternatywa - opcja -delete :
To wszystko, nie ma osobnego wywołania rm i nie musisz się martwić o nazwy plików.
Wymień
-delete
się-depth -print
przetestować tego polecenia przed uruchomieniem go (-delete
implikuje-depth
).źródło
-type f
do usuwania samych plików (i przechowywania podkatalogów)find /path/to/dir\ with\ spaces/ -mindepth 1 -mtime +5 -delete
?find
argument jest filtrem, który wykorzystuje wynik poprzedniego filtra jako dane wejściowe. Upewnij się więc, że dodałeś -delete jako ostatni argument. IE:find . -delete -mtime +5
usunie WSZYSTKO w bieżącej ścieżce.Pamiętaj, że to polecenie nie będzie działać, gdy znajdzie zbyt wiele plików. Daje błąd taki jak:
Oznacza to, że przekroczono limit wywołania systemowego exec dla długości wiersza poleceń. Zamiast wykonywania rm w ten sposób o wiele bardziej wydajne jest używanie xargs . Oto przykład, który działa:
Spowoduje to usunięcie wszystkich plików (typu f) zmodyfikowanych ponad 14 dni temu w katalogu / root / Maildir / rekurencyjnie i głębiej (mindepth 1). Więcej informacji znajdziesz w instrukcji obsługi .
źródło
find /root/Maildir/ -mindepth 1 -type f -mtime +14 -print0 | xargs -r0 rm --
To jest to samo. Musisz podać katalog nadrzędny zamiast prefiksu plików. W twoim przykładzie byłoby to:
Spowoduje to usunięcie wszystkich plików starszych niż 5 dni, które są poniżej
/path/to
i jego podkatalogów.Aby usunąć puste podkatalogi, zapoznaj się z komentarzem @Costas powyżej.
źródło
+
w takim przypadku. - 2) lepiej pisać,-exec rm '{}' +
aby odpierać zło plików ze znakami specjalnymi (spacje, znaki nowej linii itp.) W ich imieniu.źródło