Polecenie Linux, aby znaleźć pliki zmienione w ciągu ostatnich n sekund


19

Chciałbym, aby polecenie Linuksa znalazło pliki zmienione w ostatnich nsekundach.

Czy istnieje skrypt powłoki lub inne narzędzie, które mogę uruchomić z interfejsu wiersza poleceń lub GUI?

Odpowiedzi:


14

Użyj polecenia find w następujący sposób:

find . -name "*.txt" -mtime -60s

Aby znaleźć wszystkie *.txtpliki zmodyfikowane w ciągu ostatnich 60 sekund.


17
W Linuksie, przy użyciu find (od GNU Findutils 4.4.2), pojawia się błąd z tym poleceniem: find: missing argument to `-mtime'. Jednak mogę uzyskać pożądane zachowanie, używając -mmin i argumentu dziesiętnego. Nie mogłem znaleźć żadnego odnośnika na stronie podręcznika dla find do użycia sjako argumentu.
dr jimbob

4
-60s nie jest poprawnym argumentem -mtime. „60s” nie jest nawet prawidłową opcją w POSIX i GNU find. Argumentem -mtimejest liczba określająca liczbę 24-godzinnych okresów temu, kiedy plik został zmodyfikowany.
dannysauer

13

Rozwiązanie z sekundami określającymi mtime nie działa na moich systemach Linux, które używają find --version== find (GNU findutils) 4.4.2.

Otrzymuję następujący błąd:

mycomputer:~/new$ find . -mtime -60s
find: missing argument to `-mtime'
mycomputer:~/new$ find . -mtime -60seconds
find: missing argument to `-mtime'

Mogę jednak użyć -mmin(do modyfikacji w ostatnich m minutach) i mogę przyjąć argument dziesiętny; np. następujące wyszukuje pliki zmodyfikowane w ciągu ostatnich 30 sekund.

find . -mmin 0.5

Na przykład; tworzenie plików ostatnio modyfikowanych 1s, 6s, 11s, ... temu przez ostatnie 120 sekund, to polecenie znajduje:

mycomputer:~/new$ for i in $(seq 1 5 120); do touch -d "-$i seconds" last_modified_${i}_seconds_ago ; done
mycomputer:~/new$ find . -mmin 0.5
.
./last_modified_1_seconds_ago
./last_modified_26_seconds_ago
./last_modified_11_seconds_ago
./last_modified_16_seconds_ago
./last_modified_21_seconds_ago
./last_modified_6_seconds_ago

Jeśli naprawdę potrzebujesz tego w kilka sekund, możesz zrobić coś takiego:

localhost:~/new$ for i in $(seq 1 1 120); do touch -d "-$i seconds" last_modified_${i}_seconds_ago ; done
localhost:~/new$ N=18; find . -mmin $(echo "$N/60"|bc -l)
./last_modified_1_seconds_ago
./last_modified_9_seconds_ago
./last_modified_14_seconds_ago
./last_modified_4_seconds_ago
./last_modified_12_seconds_ago
./last_modified_13_seconds_ago
./last_modified_8_seconds_ago
./last_modified_3_seconds_ago
./last_modified_5_seconds_ago
./last_modified_11_seconds_ago
./last_modified_17_seconds_ago
./last_modified_16_seconds_ago
./last_modified_7_seconds_ago
./last_modified_15_seconds_ago
./last_modified_10_seconds_ago
./last_modified_6_seconds_ago
./last_modified_2_seconds_ago

8

Podobnie jak sugeruje glenn, jeśli chcesz znaleźć wszystko zmodyfikowane, powiedzmy, w czasie, gdy działał proces instalatora, może być łatwiej zrobić coś takiego:

touch /tmp/checkpoint
<do installer stuff>
find / -newer /tmp/checkpoint

Nie musisz wtedy obliczać czasu; po prostu zauważysz, że rzeczy zmieniły się po pliku punktu kontrolnego.


6

Jeśli masz wersję Find, która nie obsługuje, -mtime -60slepszym rozwiązaniem jest

touch -d '-60 seconds' /tmp/newerthan
find . -name "*.txt" -newer /tmp/newerthan

6

Najprostszym sposobem na to jest:

find . -name "*.txt" -newermt '6 seconds ago'

-mtime -60sOpcja, o których mowa w odpowiedzi, nie działa w wielu wersjach find, nawet w 2016 roku -newermtjest o wiele lepszym rozwiązaniem dla nas. Może analizować wiele różnych formatów daty i godziny.

Alternatywna metoda mminto:

find . -name "*.txt" -mmin -0.5

# Finds files modified within the last 0.5 minute, i.e. last 30 seconds

Ta opcja może nie działać we wszystkich findwersjach.


2
To jest zdecydowanie najlepsze rozwiązanie.
rednoah


1

Jeśli twoja wersja findnie akceptuje sekund lub rzeczywistych wartości, podobnie jak moja, użyj -mmin, ale określ 0, a wszystkie pliki zostaną zmodyfikowane w mniej niż minutę:

$ touch test; find . -type f -mmin 0
./test
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.