Znajdowanie plików starszych niż x dni w systemie ze zmniejszonym busyboksem

9

Muszę znaleźć i usunąć pliki starsze niż 1 tydzień w jednostce programistycznej. W tym urządzeniu dostępnych jest kilka narzędzi. -mtime findPredykat nie jest dostępny. Jak w tym przypadku sprawdzić wszystkie pliki starsze niż x dni?

Ravi
źródło
2
Nie jest jasne, co masz na myśli, mówiąc „ mtimenie jest dostępny”. To nie jest narzędzie, którego nazwę rozpoznaję.
Kusalananda
/ path / to / my / folder $ find -type f -mtime +7 usuń find: nierozpoznany: -mtime
Ravi
udostępnij dystrybucję linuksa, którego używasz.
Siva
3
Wygląda na to, że jest zajęty bez niego FEATURE_FIND_MTIME. Jest FEATURE_FIND_NEWERwłączony? Czy find -newerdziała Czy twoje testnarzędzie lub [wbudowane shwsparcie -nt?
Stéphane Chazelas,
1
Możesz obejść ten problem, jeśli możesz użyć tych touch -d/ date +%si[ file -nt other-file ]
Stéphane Chazelas

Odpowiedzi:

11

-mtimejest standardowym predykatem find(w przeciwieństwie do -delete), ale wygląda na to, że masz uproszczoną wersję busybox, w której FEATURE_FIND_MTIMEfunkcja została wyłączona w czasie kompilacji.

Jeśli możesz odbudować busybox z włączoną funkcją, powinieneś być w stanie:

find . -mtime +6 -type f -exec rm -f {} +

Lub jeśli FEATURE_FIND_DELETEjest również włączony:

find . -mtime +6 -type f -delete

Jeśli nie, można użyć innych opcji find -newer(zakładając, że FEATURE_FIND_NEWERjest włączony) dla pliku, który ma tygodniowy czas modyfikacji.

touch -d "@$(($(date +%s) - 7 * 86400))" ../ref &&
  find . ! -type f -newer ../ref -exec rm -f {} +

Lub jeśli -newernie jest dostępny, ale sh„s [podpór -nt:

touch -d "@$(($(date +%s) - 7 * 86400))" ../ref &&
  find . ! -type f -exec sh -c '
    for f do
      [ "$f" -nt ../ref ] || printf "%s\0" "$f"
    done' sh {} + |
    xargs -0 rm -f
Stéphane Chazelas
źródło
1
Tak, busybox był tutaj lżejszą wersją. Po przebudowie find . -mtime +6 -type f -exec rm {} \;pracował dla mnie
Ravi
2

Od man find:

-atime n

Ostatni dostęp do pliku n * 24 godziny temu. Kiedy dowiesz się, ile okresów 24-godzinnych poprzednio uzyskano dostęp do pliku, jakakolwiek część ułamkowa jest ignorowana, więc aby dopasować -atime +1, należy uzyskać dostęp do pliku co najmniej dwa dni temu.

-ctime n

Status pliku został ostatnio zmieniony n * 24 godziny temu. Zobacz komentarze do -atime, aby zrozumieć, w jaki sposób zaokrąglanie wpływa na interpretację czasów zmiany statusu pliku.

W zależności od przypadków użycia plików, które chcesz usunąć, są to jedyne inne opcje find. Dlaczego mtimenie jest dostępny? Z jakiego systemu plików korzystasz? Czy zbadałeś jakieś inne opcje?

OneK
źródło
Zadawanie więcej pytań PO powinny być wykonane jako wyjaśniających komentarzach , a nie z pytaniami i odpowiedziami .
Jeff Schaller