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ć find
nastę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ć find
następnie exec -rm
? Używam ksh.
Odpowiedzi:
Używanie find
jest 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 -f
ogranicza 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 -newerBt
zamiast tego -newermt
sprawdzić 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 {} \;
find
powinieneś użyć -daystart
modyfikatora, aby wymusić -mtime
wartość do północy.