удалить .gitignored файлы с помощью rsync

Мне часто нужно использовать rsync для синхронизации локального с возможным удаленным каталогом, в то время как игнорирование точно всех файлов git игнорируется из-за его конфигурации .gitignore.

Для этого в настоящее время я перечисляю все файлы, относящиеся к копированию с помощью git, а затем передаю их в rsync.

cd $source { git ls-files -coz --directory --exclude-standard printf '.git\0' } | rsync --info=progress2 -ar0 --files-from=- ./ "$destination" 

Оставляя синтаксический анализ git сам, а затем прокладывая список файлов в rsync, есть некоторые преимущества, от которых я зависим.

  • Шаблоны для игнорирования файлов могут быть довольно сложными, также включая отрицание ( !inverse-pattern-to-include ), которое rsync не понимает в этом синтаксисе.
  • .gitignore файлы, размещенные в подкаталогах, также должны быть приняты во внимание. Фильтр merge-dir Rsync не позволяет полностью переделать это, потому что для rsync порядок включает и исключает вопросы.
  • Также рассматриваются глобальные конфигурационные файлы git, такие как .git/info/exclude .
  • Он может работать даже без инициализации git-репозитория, просто нужно указать git на пустой репозиторий с помощью --git-dir .
  • Хранилища могут быть довольно большими, поэтому указание всех соответствующих файлов как --filter rsync --filter или --filter ограничения командной строки или серьезному замедлению rsync. Использование --files-from позволяет избежать этого.

Теперь мне нужно улучшить этот фрагмент кода, чтобы поддерживать флаг --del rsync, чтобы удалить все файлы из $destination , которые отсутствуют или исключены из $source . К сожалению, это не очень хорошо работает с --files-from . Возможно ли это без лишнего сравнения списков файлов с обоих концов?

Interesting Posts

Как использовать sed, как заменить строку, содержащую шаблон, содержимым из другого файла?

Как проверить, соответствует ли имя файла шаблону?

Извлечение / установка TAR-файла

Как печатать защищенный паролем pdf с чашками из командной строки?

Как достичь «непрерывности случайности»?

Разница размеров между изо-файлом, сгоревшим на компакт-диск, и файлом, полученным с помощью dd

Как установить man-страницы на centos?

Как получить последний день предыдущего месяца в UNIX (HPUX)

Как передать (на USB-накопитель) или прочитать файл .odt в командной строке?

Упаковка deb: как обрабатывать потенциально отсутствующие зависимости

Невозможно остановить autofs на FC19

USB Kingston pendrive, признанный lsusb, но не назначенный / dev / sd * path

bash: как вы возвращаете расширения файлов?

Каковы различия между основными дистрибутивами Linux?

Понимание вывода последнего завершения перезагрузки

Linux и Unix - лучшая ОС в мире.