Я хотел бы, чтобы команда Linux нашла файлы, измененные за последние n
секунды.
Есть ли сценарий оболочки или другой инструмент, который я могу запустить из интерфейса командной строки или графического интерфейса?
Я хотел бы, чтобы команда Linux нашла файлы, измененные за последние n
секунды.
Есть ли сценарий оболочки или другой инструмент, который я могу запустить из интерфейса командной строки или графического интерфейса?
Ответы:
Используйте команду find следующим образом:
find . -name "*.txt" -mtime -60s
Чтобы найти все *.txt
файлы, измененные за последние 60 секунд.
-mtime
. «60-е годы» также не являются допустимой опцией в POSIX или GNU find. Аргументом -mtime
является число, которое указывает количество 24-часовых периодов назад, когда файл был изменен.
Решение с указанием секунд mtime не работает на моих системах Linux, которые используют find --version
== find (GNU findutils) 4.4.2
.
Я получаю следующую ошибку:
mycomputer:~/new$ find . -mtime -60s
find: missing argument to `-mtime'
mycomputer:~/new$ find . -mtime -60seconds
find: missing argument to `-mtime'
Тем не менее, я могу использовать -mmin
(для изменения за последние m минут) и может принимать десятичный аргумент; Например, следующее находит файлы, измененные за последние 30 секунд.
find . -mmin 0.5
Так, например; создавая файлы, последние измененные 1 с, 6 с, 11 с, ... назад за последние 120 секунд, эта команда находит:
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
Так что если вам это действительно нужно за считанные секунды, вы можете сделать что-то вроде:
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
Подобно тому, что предложил Гленн, если вы хотите найти все измененное, скажем, во время, в течение которого выполнялся процесс установки, может быть проще сделать что-то вроде:
touch /tmp/checkpoint
<do installer stuff>
find / -newer /tmp/checkpoint
Тогда вам не нужно делать расчет времени; вы просто находите вещи, измененные после файла контрольных точек.
Самый простой способ сделать это:
find . -name "*.txt" -newermt '6 seconds ago'
-mtime -60s
Вариант, упомянутый в ответе, не работает на многих версиях find
, даже в 2016 году -newermt
это гораздо лучший вариант для нас. Он может анализировать много разных форматов даты и времени.
Альтернативный метод, использующий mmin
это:
find . -name "*.txt" -mmin -0.5
# Finds files modified within the last 0.5 minute, i.e. last 30 seconds
Эта опция может не работать для всех find
версий.
Если вы отслеживаете изменения файлов в каталоге, вы, вероятно, захотите использовать inotify-tools вместо бесконечного цикла опроса.
find: missing argument to `-mtime'
. Тем не менее, я могу получить желаемое поведение, используя -mmin и десятичный аргумент. Я не смог найти никакой ссылки в справочной странице для поиска для использованияs
в качестве аргумента.