Хвостовой непрерывный 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