Используйте rsync для автоматического копирования файла в другую папку

Я нашел эту команду для копирования содержимого источника в папку назначения.

rsync -r source/* destination

Мне бы очень хотелось, чтобы эта команда запускалась автоматически каждый раз, когда файл добавляется в мою исходную папку.

Это возможно?

Вы можете использовать скрипт, который сочетает в себе rsyncи inotifyтакой, как этот

Ответы (3)

Вы можете использовать действия Automator и Folder, чтобы просмотреть папку и запустить скрипт.

При запуске Automator и выборе «Создать» одним из предложенных вариантов является выполнение «Действия с папкой». В верхней части экрана после выбора действия с папкой вам предоставляется возможность выбрать папку для «просмотра».

введите описание изображения здесь

Я думаю, что вы хотели бы сделать в своем случае, это затем выбрать «Утилиты» в крайнем левом столбце, а затем перетащить «Запустить сценарий оболочки» из второго столбца в окно рабочего процесса.

введите описание изображения здесь

Здесь вы можете написать любой скрипт, который хотите запускать при внесении изменений в папку. В этом случае ваш скрипт rsync.

введите описание изображения здесь

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

Одно быстрое и грязное решение этого вопроса , переносимое на платформы UNIX (не относится к OSX, но может использоваться в HP-UX, Solaris, Linux и т. д.), — это вызвать rsync из пользовательского crontab и разрешить синхронизацию папок rsync. сама логика определяет, была ли изменена папка или нет. Одним из усовершенствований использования этого портативного решения является обертка вызова rsync проверкой даты между затронутым файлом (фактически временем его изменения) и временем изменения папки, которая должна быть синхронизирована, но это не обязательно, если только папки не синхронизируются очень большие (глубокие и/или широкие). Для этого решения идеально подходит одна папка с несколькими подпапками.

Запись для crontab, которая будет выполнять «быстрый и грязный» случай с минутным интервалом опроса:

# run sync every minute:
* * * * * /usr/bin/rsync -avz $HOME/source_path $HOME/target/path 1>> $HOME/.my_sync.log 2>&1

Это должно подойти для быстрого и грязного случая - другими словами, папки будут обновляться в течение минуты после внесения изменений. Проверьте файл ~/.my_sync.log на наличие статусов выполнения — этот файл со временем будет неограниченно расти, поэтому, как только будет определена правильная работа, измените «>>» на «>», чтобы, по крайней мере, зарегистрировать самый последний статус rsync.

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

Примечание об использовании crontab:

Если вы не можете редактировать свой crontab с помощью:

$ crontab -e

Затем вам нужно будет разрешить себе иметь crontab. См. справочную страницу для crontab. В OSX это то, что нужно сделать — изменение немного отличается в системах Linux: в двух словах, убедитесь, что ваш идентификатор пользователя находится в /usr/lib/cron/cron.allow или в /usr/lib/cron/ cron.allow не существует. Кроме того, убедитесь, что ваш идентификатор пользователя отсутствует в /usr/lib/cron/cron.deny.

Инструмент, который я бы использовал для мониторинга ваших папок, — это Hazel . Было бы отлично запустить сценарий, и вы могли бы в конечном итоге использовать его для многих других папок с течением времени, поскольку вы думаете о вещах, которые вы могли бы автоматизировать.