Я обычно делаю, rsync -n
прежде чем делать фактический rsync
. Дело в том, как я могу автоматизировать второй запуск для повторного использования именно сгенерированного списка --dry-run
?
Я имею в виду, что если я бегу, rsync -n
то получаю симуляцию того, что rsync
будет делать, моя идея заключается в том, чтобы взять этот вывод, обработать его, а затем каким-то образом сделать rsync
только --include-from
этот вывод, поэтому полный список должен быть рассчитан только один раз.
Если это даже не имеет смысла, пожалуйста, дайте мне знать.
Кстати, я склонен использовать rsync -hva --progress --stats --delete --exclude-from "$EXCLUDEFILE"
. Если у вас также есть предложение о том, какие варианты вы бы использовали, пожалуйста, дайте мне знать. Я пытаюсь скопировать содержимое внешнего жесткого диска (который содержит только изображения, видео и документы) на другой внешний жесткий диск.
источник
--dry-run
команды в файл (например,rsync --dry-run -avz SOURCE DEST > include.txt
), удалить все строки, которые не являются файлами / путями из include.txt, и запуститьrsync --include-from include.txt
.rsync --include-from include.txt --exclude=* SOURCE DEST
. См. Stackoverflow.com/a/19296415/1765910 для получения подробной информации.rsync
но ничего не знаю из сценариев оболочки / bash ...Ответы:
Разумеется, можно использовать список файлов, созданный во время пробного запуска, в качестве включаемого файла. В идеале, однако, следует удалить лишние строки вверху и внизу пробного прогона.
Пример вывода:
Чтобы удалить эти строки, направьте
rsync
вывод вhead
и вtail
. Затем сохраните обработанный вывод во включаемый файл:rsync --dry-run -avz source/ destination/ | head --lines=-3 | tail --lines=+3 > include.txt
Наконец, скажите
rsync
использовать сгенерированный включаемый файл (добавляя дополнительные параметры по желанию):rsync --include-from=include.txt --exclude=* source/ dest/
источник
tail
/head
надежным, чтобы иметь только список файлов?--delete
приводит к удалению файлов, удаленных из исходных каталогов, также из целевых каталогов, по крайней мере, на компьютере, на котором я его пробовал. Вы можете опуститьtail
/head
часть полностью.rsync
интерпретирует каждую строку во включаемом файле как имя файла и просто игнорирует несуществующие файлы, поэтому ничего не произойдет, если вы сохраните дополнительные строки (если у вас не будет файлов с именем «отправка списка добавочных файлов» и т. д., в этом случае эти файлы также будут скопированы).