Jak znaleźć i usunąć pliki starsze niż określone dni w Uniksie?
38
Mam jeden folder dziennika z 7 folderami. Te siedem folderów również ma podfoldery, a te podfoldery również mają podfoldery. Chcę usunąć wszystkie pliki starsze niż 15 dni we wszystkich folderach, w tym w podfolderach, bez dotykania struktury folderów, co oznacza tylko pliki.
mahesh@inl00720:/var/dtpdev/tmp/ > ls
A1 A2 A3 A4 A5 A6 A7
mahesh@inl00720:/var/dtpdev/tmp/A1/ > ls
B1 B2 B3 B4 file1.txt file2.csv
Możesz zacząć od powiedzenia find /var/dtpdev/tmp/ -type f -mtime +15. Spowoduje to znalezienie wszystkich plików starszych niż 15 dni i wydrukowanie ich nazw. Opcjonalnie możesz określić -printna końcu polecenia, ale jest to akcja domyślna. Wskazane jest, aby najpierw uruchomić powyższe polecenie, aby zobaczyć, które pliki są wybrane.
Po sprawdzeniu, czy findpolecenie wyświetla listę plików, które chcesz usunąć (i żadnych innych), możesz dodać „akcję”, aby usunąć pliki. Typowe działania w tym celu to:
-exec rm -f {} \;(lub równoważnie -exec rm -f {} ';')
To będzie działać rm -fna każdym pliku; na przykład,
więc może być nieco szybszy niż opcja 1. (Może być konieczne uruchomienie rm -fgo kilka razy, jeśli masz tysiące plików).
-delete
To każe findsobie usunąć pliki, bez uruchamiania rm. Może to być nieskończenie szybsze niż -execwarianty, ale nie będzie działać na wszystkich systemach.
Tak więc, jeśli użyjesz opcji 2, całe polecenie będzie:
Użycie opcji -delete jest prostsze (składnia i brak procesów potomnych wykonujących usuwanie), ale może nie działać we wszystkich systemach. rm -f {} + jest najlepszy, usunie pliki partiami, jeśli będzie wystarczającej liczby plików, aby było ich za dużo dla jednego wiersza poleceń. rm -f {} ';' poda zbyt długi błąd polecenia, jeśli jest wystarczająca ilość plików, aby było za dużo dla jednego wiersza polecenia.
gaoithe
-1
Lub zrób to za pomocą pętli:
for x in $(find /var/dtpdev/tmp/ -type f -mtime +15); do rm "$x"; done
Zamiast tego możesz użyć pętli while, która powinna zająć się plikami ze spacjami. find / var / dtpdev / tmp / -type f -mtime +15 | podczas odczytu x; do rm "$ x"; zrobione
Lub zrób to za pomocą pętli:
źródło