Хвостовой непрерывный ls (список файлов)
Я отслеживаю новые файлы, созданные в папке в linux. Время от времени я выпускаю в нем "ls -ltr". Но мне жаль, что не было программы / script, которая автоматически печатала бы ее, и только последние записи. Я сделал короткий цикл, чтобы перечислить его, но он повторит записи, которые не были новыми, и это заставит мой экран зависнуть, когда новых файлов не будет. Я узнал о "watch", который показывает, что я хочу, и обновляет каждые N секунд, но мне не нужен интерфейс ncurses, я ищу что-то вроде tail:
- непрерывной
- показывает только новый материал
- печатает в моем терминале, поэтому я могу запускать его в фоновом режиме и делать другие вещи и видеть результат каждый раз, а затем смешиваться с тем, что я делаю: D
Подведение итогов: получить вход, сравнить с предыдущим вводом, выводить только то, что является новым.
Что-то, что делает это, не похоже на такой нечетный инструмент, я вижу, что он используется и для других ситуаций, поэтому я ожидаю, что он уже существует, но я ничего не мог найти. Предложения?
Ответы
Ответ 1
Если у вас есть доступ к inotifywait
(доступный из пакета inotify-tools, если вы находитесь в Debian/Ubuntu), вы можете написать script следующим образом:
#!/bin/bash
WATCH=/tmp
inotifywait -q -m -e create --format %f $WATCH | while read event
do
ls -ltr $WATCH/$event
done
Это однострочный шрифт, который не даст вам той же информации, что и ls
, но будет распечатывать имя файла:
inotifywait -q -m -e create --format %w%f /some/directory
Ответ 2
Вы можете использовать очень удобную команду watch
watch -n 10 "ls -ltr"
И вы получите ls
каждые 10 секунд.
И если вы добавите tail -10
, вы получите только 10 новых.
watch -n 10 "ls -ltr|tail -10"
Ответ 3
Это работает в cygwin
и Linux
. Некоторые из предыдущих решений, которые пишут файл, заставят диск трэш.
Этот script не имеет этой проблемы:
SIG=1
SIG0=SIG
while [ $SIG != 0 ] ; do
while [ $SIG = $SIG0 ] ; do
SIG=`ls -1 | md5sum | cut -c1-32`
sleep 10
done
SIG0=$SIG
ls -lrt | tail -n 1
done