Как использовать «stat» для обнаружения нового файла, а затем переместить его в другой каталог?

Почему вы хотите объединить все эти файлы в один файл?

  1. Если вы хотите передать их программе, которой нужен stdin, вы можете сделать следующее:

    cat *.csv | prog
    

    или любой другой метод объединения, упомянутый ранее.

  2. Если программа ожидает именованный файл в качестве входного, сделайте что-то вроде этого:

    mkfifo p
    cat *.csv > p &
    prog p
    
  3. Если вам нужен один файл, потому что один файл легче резервировать, тогда может быть полезно все скрепить смолой. Если вы хотите читать файлы, не распаковывая их, тогда вы можете превратить tar-файл в fs на основе fuse.

1
18.08.2018, 18:09
2 ответа

Все, что вам нужно, это incron. Сначала установите пакет incron, если у вас Ubuntu/Debian :

.
sudo apt install incron

или используйте команду для Red Hat/Fedora:

sudo yum install incron

Откройте файл /etc/incron.allowв вашем любимом текстовом редакторе -пусть будетvim:

vim /etc/incron.allow

и добавьте новую строку с вашим именем пользователя (предположим, что это bob), чтобы разрешить ему использоватьincron:

bob

Затем откройте incronредактор правил:

incrontab -e

и добавьте следующую строку:

/home/userid/drop/ IN_CREATE mv /home/userid/drop/$# /home/userid/current/

где $#— это incron, встроенный -в подстановочный знак, что означает имя недавно удаленного файла резервной копии, обнаруженного incron.

Чтобы проверить созданное правило, добавьте файл в каталог /home/userid/drop/и проверьте, не был ли удаленный файл перемещен в каталог /home/userid/current/. Дополнительно проверьте системный журнал:

tail /var/log/syslog
2
27.01.2020, 23:31

Периодическое cronзадание не подходит, так как оно запускается только изредка, в то время как процесс, реагирующий на изменения inode, должен выполняться все время. Должно быть достаточно @rebootзадания, которое запускает процесс, который (надеюсь )будет работать вечно.

$ crontab -l
@reboot /home/jhqdoe/job
$ cat job
#!/bin/sh
dir=/home/jhqdoe/drop/
target=/home/jhqdoe/current/
inotifywait -m "$dir" --format '%w%f' -e create \
| while read file; do mv -- "$file" "$target"; done
$ sudo reboot

Демон запуска, управляемый системой инициализации, вероятно, был бы лучшим вариантом, если это возможно, поскольку его легче перезапустить в случае сбоя задания по ряду причин.

0
27.01.2020, 23:31

Теги

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