В настоящее время я использую rsync
сценарий, который развертывает приложение PHP с промежуточного уровня на рабочий сервер. Вот как:
rsync -rzai --progress --stats --ignore-times --checksum /tmp/app_export/ root@app.com:/var/www/html/app/
В настоящее время выводится список каждого сравниваемого файла (каждого файла в проекте), но я бы хотел, чтобы он выводил только измененные, поэтому я могу запустить его с --dry-run
возможностью проверки того, что каждое развертывание обновляет только желаемые файлы.
ПРИМЕЧАНИЕ. Лучшее, что я мог сделать на данный момент, - grep fcst
это результаты, но я ищу rsync
вариант, который, я уверен, что он есть, но я не могу найти его на страницах руководства.
Заранее спасибо!
-P
прогресс делает именно это в-n
настройке Dryrun, хотя-i
тоже не ошибается. Смотрите мой ответ ниже.Используйте
--out-format
опциюСогласно справочной странице:
Если вам нужны только фактические имена файлов (
--out-format="%n"
), ваша команда пробного запуска может выглядеть так:rsync -rzan --out-format="%n" --ignore-times --checksum /tmp/app_export/ root@app.com:/var/www/html/app/
Когда rsync вызывается с помощью
-v
, он внутренне использует эту опцию с форматом по умолчанию"%n%L"
, который сообщает только имя файла и, если item является ссылкой, на которую он указывает.Но это также включает в себя краткое резюме в начале и в конце процесса синхронизации.
Чтобы избавиться от этого резюме, используйте
--out-format
опцию напрямую.Btw.
-i
также для внутреннего использования--out-format
, но с форматом"%i %n%L"
.источник
Начиная с версии rsync v3.1.0, выпущенной в 2013 году, существует
--info
флаг, позволяющий детально контролировать вывод.Доступные
--info
флаги:источник
Не уверен, если это отличается между используемыми версиями / опциями, но в версии MySQL, когда я использую
-i
опцию, я получаю список вроде:Итак, простое решение, чтобы получить только список фактически переданных файлов, просто запустите:
Это просто скроет все строки, содержащие
f..T......
. Так что эффективно это скроет идентичные файлы.источник
На самом деле, вы как бы ответили на свой вопрос, поскольку у вашей первоначальной команды он уже есть
--progress
Это правильный вариант, хотя справочная страница немного загадочна:
Это имеет смысл, так как вы вызываете свою
rsync
строку в режиме dryrun, трансер не происходит, но у вас все равно будет прогресс: а именно файлы, которые изменились и будут переданы.Таким образом, вы получите аккуратный маленький список всех файлов, например:
У места назначения уже есть копия измененного файла, который был обновлен в исходном файле, и старый файл, который остается неизменным. Источник также имеет дополнительный файл: newfile.
Если затем мы вызовем вашу команду rsync, но удалим элементизацию
-i
и просто добавим dryrun-n
Вы получите список только тех файлов, которые rsync передал бы: changefile и newfile.
источник