-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.
Есть ли конкретная причина, которую Вы используете:
| 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
Одна вещь, которую Вы могли сделать, делают небольшую программу, которая перемещает обработанные файлы из каталога к другому после того, как они были обработаны. Просто перезапустите сканирование каталога после того, как Вы будете сделаны. Сон для разумного количества времени перед повторным сканированием, если никакие файлы не там и делают это на время поколения файлов (процесс, генерирующий файлы, кажется, только работает в течение приблизительно максимум 100 минут).
Если Вы не можете переместить файлы из каталога, другой подход должен запустить с метки времени даты DTS где-нибудь в прошлом. Затем найдите все файлы более новыми, чем DTS, обработайте их и обновите DTS, если метка времени файла является более новой, чем DTS. Повторите этот процесс как с решением выше. Если гранулярность Ваших меток времени препятствует тому, чтобы два файла имели того же, можно просто искать файлы, более новые, чем DTS. В противном случае необходимо искать файлы, не более старые, чем DTS, и сохранить список файлов с DTS, который Вы собираетесь использовать на следующем запуске и фильтровать тех, которые на следующем запуске.
inotifywait
выполнения неограниченно долго, таким образом, я должен уничтожить процесс вручную. Есть ли какой-либо способ сделать это изящно?--timeout
опция ожидает только первого события и затем выходит.Спасибо! – rohitkulky 10.06.2013, 12:01monitor
иtimeout
вместе с текущей версией необходимо будет установитьgit
версия. Ответ обновляется. – don_crissti 10.06.2013, 15:38