Mam katalog zawierający dużą liczbę plików (takich jak dzienniki na każdy dzień roku). Chciałbym usunąć wszystkie pliki utworzone przed, powiedzmy, 22/11. Jak mogę to osiągnąć? Czy muszę użyć findnastępnie exec -rm? Używam ksh.
Mam katalog zawierający dużą liczbę plików (takich jak dzienniki na każdy dzień roku). Chciałbym usunąć wszystkie pliki utworzone przed, powiedzmy, 22/11. Jak mogę to osiągnąć? Czy muszę użyć findnastępnie exec -rm? Używam ksh.
Odpowiedzi:
Używanie findjest nadal preferowanym sposobem usuwania plików. Więcej informacji można znaleźć na stronie http://mywiki.wooledge.org/UsingFind .
Jednym ze sposobów jest utworzenie pliku ze znacznikiem czasu. na przykład
touch -t 201311220000 /tmp/timestamp
Teraz usuń pliki GNU find(zakładając w bieżącym katalogu), które pasują do znacznika czasu, np .:
find . -type f ! -newer /tmp/timestamp -delete
lub znajdź GNU
find . -type f ! -newer /tmp/timestamp -exec rm {} \;
type -fogranicza działanie tylko do plików.
Z GNU lub niektórymi BSD find:
find . ! -newermt 2013-11-22 ! -type d -delete
Pamiętaj, że sprawdza czas ostatniej modyfikacji plików. W przypadku niektórych plików BSD można -newerBtzamiast tego -newermtsprawdzić czas urodzenia i- węzła pliku, jeśli jest dostępny.
find /path/to/directory/ -mtime +<number of days> -name '<file name>' -exec rm -rf {} \;
przykład:
find /Netap_fileshare_backup/SQL/DB_backups/xeo/ -mtime +15 -name 'ORA_XEO*' -exec rm -rf {} \;
W takim przypadku usunie wszystkie pliki, które zaczynają się na „ORA_XEO” na więcej niż 15 dni.
rm -rf, pierwsze polecenie usunie wszystko, co jest w katalogach starszych niż te 15 dni. (Także, dlaczego nawias wokół -name?)
example.jar- zostanie usunięty example.cp- zostanie usunięty example.tar- nie zostanie usunięty
find /path/to/directory/ -mtime +<number of days> \( -name '*.jar' -o -name '*.cp' \) -name 'ex*' -exec rm -rf {} \;
findpowinieneś użyć -daystartmodyfikatora, aby wymusić -mtimewartość do północy.