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.
26
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
Teraz usuń pliki GNU
find
(zakładając w bieżącym katalogu), które pasują do znacznika czasu, np .:lub znajdź GNU
źródło
type -f
ogranicza działanie tylko do plików.Z GNU lub niektórymi BSD
find
: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.źródło
przykład:
W takim przypadku usunie wszystkie pliki, które zaczynają się na „ORA_XEO” na więcej niż 15 dni.
źródło
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ętyexample.cp
- zostanie usuniętyexample.tar
- nie zostanie usuniętyfind /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.