Inotifywait для большого количества файлов в каталоге

-a в явном AND оператор, который позволяет Вам соединяться два основных устройства. В этом случае, создающем использование диапазона -size.

find . -size +386b -a -size -390b -exec rm -f {} \;

Обратите внимание, что размер является числовым аргументом, который может дополнительно предварительно ожидаться с + и -. От man 1 find:

   Numeric arguments can be specified as

   +n     for greater than n,
   -n     for less than n,
    n      for exactly n.
7
28.05.2013, 00:04
2 ответа

Есть ли конкретная причина, которую Вы используете:

 | awk '($2=="CREATE"){print $3}' > ~/output.file

вместо этого inotifywait опции как --format и --outfile ?

Если я работаю:

inotifywait -m --format '%f' -e create /home/don/folder/ --outfile /home/don/output.file

затем откройте другую вкладку, cd кому: ~/folder и выполненный:

time seq -w 00001 50000 | parallel touch {}

real    1m44.841s
user    3m22.042s
sys     1m34.001s

(таким образом, я получаю намного больше чем 500 файлов в минуту), все хорошо работает и output.file содержит весь 50000 имена файлов, которые я просто создал.
После того как процесс закончил писать файлы в диск, можно добавить их к Вашему test.out (принятие Вас всегда находится в ~/folder):

xargs < /home/don/output.file cat >> final.file

Или используйте read если Вы хотите обработать файлы, поскольку они создаются. Так, в то время как в ~/folder Вы могли работать:

inotifywait -m --format '%f' -e create ~/folder | while read file; do cat -- "$file" >> ~/test.out; done

Отметьте это в inotifywait стабильный, -m и -t не может использоваться вместе. Поддержка использования обоих переключателей была недавно добавлена поэтому, если Вы создаете inotify-tools от git необходимо смочь использовать monitor с timeout (для определения, сколько времени это должно ожидать соответствующего события для появления прежде, чем выйти). Я протестировал git версия в моей системе (выходят если нет create события имеют место в течение 2 секунд), и это хорошо работает:

inotifywait -m -t 2 --format '%f' -e create ~/folder | while read file; do cat -- "$file" >> ~/test.out; done
6
27.01.2020, 20:18
  • 1
    я хочу сделать вещи параллельно, сэкономить время. Создание маленьких файлов и добавление их, поскольку они создаются. Так, awk отфильтрует созданные файлы из общего списка inotiify, генерирует. –  rohitkulky 26.05.2013, 20:01
  • 2
    Эй Дон, это работает просто великолепно! Я столкнулся с этим ранее, но не мог получить вещи работать так или иначе.Спасибо! :) –  rohitkulky 26.05.2013, 21:09
  • 3
    можно поместить этот комментарий в ответ для ясности, пользы других! :) –  rohitkulky 26.05.2013, 21:10
  • 4
    извините для перевода в рабочее состояние этого поздно это выше сценария хорошо работает как, я сказал. Но после того как процесс создания файла в каталоге закончен, inotifywait выполнения неограниченно долго, таким образом, я должен уничтожить процесс вручную. Есть ли какой-либо способ сделать это изящно? --timeout опция ожидает только первого события и затем выходит.Спасибо! –  rohitkulky 10.06.2013, 12:01
  • 5
    @rohitvk - Вы не можете использовать monitor и timeout вместе с текущей версией необходимо будет установить git версия. Ответ обновляется. –  don_crissti 10.06.2013, 15:38

Одна вещь, которую Вы могли сделать, делают небольшую программу, которая перемещает обработанные файлы из каталога к другому после того, как они были обработаны. Просто перезапустите сканирование каталога после того, как Вы будете сделаны. Сон для разумного количества времени перед повторным сканированием, если никакие файлы не там и делают это на время поколения файлов (процесс, генерирующий файлы, кажется, только работает в течение приблизительно максимум 100 минут).

Если Вы не можете переместить файлы из каталога, другой подход должен запустить с метки времени даты DTS где-нибудь в прошлом. Затем найдите все файлы более новыми, чем DTS, обработайте их и обновите DTS, если метка времени файла является более новой, чем DTS. Повторите этот процесс как с решением выше. Если гранулярность Ваших меток времени препятствует тому, чтобы два файла имели того же, можно просто искать файлы, более новые, чем DTS. В противном случае необходимо искать файлы, не более старые, чем DTS, и сохранить список файлов с DTS, который Вы собираетесь использовать на следующем запуске и фильтровать тех, которые на следующем запуске.

0
27.01.2020, 20:18

Теги

Похожие вопросы