Другой полезный прием ZSH:
Рассматривайте вывод команды как файл:
emacs =(hg cat -r 100 somefile)
Это открывает старую версию Подвижно прослеженного файла в emacs для выделенного синтаксисом просмотра. Без этого я должен был бы бездельничать с hg revert
, hg archive
, или явно отправьте hg cat
вывод во временный файл.
Конечно, это работает с любой программой, которая открывает файлы и любую программу, которая печатает к стандартному выводу.
Если Вам установили inotify-инструменты, можно использовать inotifywait
для инициирования действия, если файл или каталог записан в:
#!/bin/sh
dir1=/path/to/A/
while inotifywait -qqre modify "$dir1"; do
/run/backup/to/B
done
Где -qq
переключатель абсолютно тих, -r
является рекурсивным (в случае необходимости) и -e
событие должно контролировать в этом случае modify
. От man inotifywait
:
изменить
Наблюдаемый файл или файл в рамках наблюдаемого каталога были записаны в.
Строго говоря, если кто-то отбрасывает файл и очень быстро удаляет его, Вы могли бы пропустить его. Использование inotify (в соответствии с Linux или подобной функцией под другими нельдами) делает окно риска маленьким.
Если можно смонтировать файловую систему по Вашему выбору на том каталоге (я понимаю, что это не может быть опцией), можно поместить тот, который записывает все версии файла, например, copyfs.
Попробуйте инструмент командной строки entr
, который может запускать произвольные команды при изменении файлов. Начиная с версии 2.9, опция наблюдения за каталогом ( -d
) была добавлена для реакции на события, когда новый файл добавляется в каталог.
Пример запуска утилиты, если в проект добавляется новый файл:
$ while true; do
> echo src/* | entr -d your_command
> done
В режиме наблюдения за каталогом родительский каталог каждого файла неявно добавляется в список наблюдения.
Единственное значение этого состоит в том, что если появляется новый файл, он должен выйти, чтобы позволить внешнему циклу оболочки повторно просканировать файловую систему.
Вот версия без опции наблюдения за каталогом:
$ while true; do
> echo src/* src | entr your_command
> done
Вот более простой пример, зависящий от ваших потребностей:
$ ls -d * | entr sh -c 'rsync -vuar A B'
Подробнее см. На веб-сайте entrproject.org .
incrond
может также представлять интерес. – Shawn J. Goff 06.11.2011, 15:50/etc/profile
для в масштабе всей системы или.bash_profile
для просто Вашего пользователя. Для выполнения его после начальной загрузки он зависит от аромата Unix/Linux;/etc/rc.local
,/etc/rc.d/
или/etc/init.d/
– jasonwryan 07.11.2011, 19:05--monitor
переключатель (и канал вывод к Вашему циклу вместо этого), иначе существует много издержек когдаinotifywait
запускается много раз – Tobias Kienzler 10.01.2013, 19:10