У меня около 50 файлов в различных подкаталогах, которые я хотел бы отправить на удаленный сервер. Я подумал, что rsync сможет сделать это за меня, используя параметр --include-from. Без опции --exclude = "*" все файлы в каталоге синхронизируются, с этой опцией файлы не синхронизируются.
rsync -avP -e ssh --include-from=deploy/rsync_include.txt --exclude=* ./ root@0.0.0.0:/var/www/ --dry-run
Сначала я запускаю его как сухой, и 0.0.0.0, очевидно, заменяется IP-адресом удаленного сервера. Содержимое rsync_include.txt - это разделенный новой строкой список относительных путей к файлам, которые я хочу загрузить.
Есть ли лучший способ сделать это, чтобы убежать от меня в понедельник утром?
rsync --files-from
это, вероятно, более простое и надежное решение :)Есть флаг,
--files-from
который делает именно то, что вы хотите. Откудаman rsync
:источник
rsync -av --files-from=file-list . target/
для копирования файлов из текущего каталога.The filenames that are read from the FILE are all relative to the source dir
...
rsync, похоже, игнорирует..
выдачу мне ошибки, напримерrsync: link_stat "/home/michael/test/subdir/test.txt" failed: No such file or directory
(в этом случае запускается из каталога "test" и пытается указать "../subdir/test.txt", который действительно существует.--files-from
ли комбинировать аргумент с явным списком включений и исключений, и будут ли файлы из списка, добавленные с помощью,--files-from
переопределять существующие правила исключения, чтобы они включались, если они появляются в файле?--files-from=
Если вы хотите, чтобы абсолютный путь оставался неизменным, параметр нуждается в завершающей косой черте. Итак, ваша команда будет выглядеть примерно так:Это можно сделать, как если бы имеется большое количество файлов, и вы хотите скопировать все файлы по пути x. Таким образом, вы должны найти файлы и передать результат в файл, как показано ниже:
источник
Для справки, ни один из приведенных выше ответов не помог, кроме одного. Подводя итог, вы можете выполнить операцию резервного копирования
--files-from=
, используя:ИЛИ
Первая команда не требует пояснений, помимо содержимого файла,
rsync-src-files
которое я подробно расскажу ниже. Теперь, если вы хотите использовать последнюю версию, вам нужно иметь в виду следующие четыре замечания:--files-from
и исходный каталог--recursive
.rsync-src-files
создан пользователем и помещен в каталог src для этого теста.rsyn-src-files
содержат файлы и папки для копирования, и они берутся относительно исходного каталога. ВАЖНО: Убедитесь, что в файле нет конечных пробелов или пустых строк. В приведенном ниже примере всего две линии, а не три (это получается случайно). Содержаниеrsynch-src-files
:имя_папки1
имя_папки2
источник
У меня аналогичная задача: выполнить синхронизацию всех файлов, измененных после указанной даты, но исключая некоторые каталоги. Было сложно создать один лайнер «все в одном», поэтому я разделил проблему на более мелкие части. Окончательное решение:
Сначала пользуюсь
find -L ~/sourceDIR -type f -newermt "DD MMM YYYY HH:MM:SS"
. Я попытался добавитьregex
вfind
строку, чтобы исключить шаблоны имен, однако мой вкус Linux (Mint) не понимает отрицания регулярного выражения вfind
. Пробовал количество вариантов регулярных выражений - не работает по желанию. Таким образом, я получаюegrep -v
- вариант, который исключает шаблон простым способом. Myrsync
не копирует каталоги, такие как /.cache или /.config, а также некоторые другие, которые я явно назвал.источник
bash
однострочник:rsync -v --files-from=<(find ~/sourceDIR -type f -newermt "DD MMM YYYY HH:MM:SS" | grep -Ev "/\..|Downloads|FOO") ~/sourceDIR /Destination
Синтаксис:
rsync <file_/_folder_list> <source> <target>
Имена папок (здесь С завершающим
/
; напримерCancer - Evolution/
) находятся в файле списка папок (например: cm_folder_list_test):Если вы не
/
включите эти завершающие , целевые папки rsync'd будут созданы, но пусты.Эти имена папок добавляются к остальной части их пути (
/home/victoria/Mail/2_RESEARCH - NEWS
), таким образом обеспечивая полный путь к папке для rsync; например:/home/victoria/Mail/2_RESEARCH - NEWS/Cancer - Evolution/
.Обратите внимание, что вам также необходимо использовать
--files-from=
..., НЕ--include-from=
...rsync -aqP --delete --files-from=/mnt/Vancouver/projects/ie/claws/data/cm_folder_list_test "/home/victoria/Mail/2_RESEARCH - NEWS" $IN/
(В моем сценарии BASH я определил переменную
$IN
следующим образом.)Используемые параметры rsync:
источник
Этот ответ не является прямым ответом на вопрос. Но это должно помочь вам понять, какое решение лучше всего подходит для вашей проблемы.
При анализе проблемы следует активировать опцию отладки.
-vv
Затем rsync выведет, какие файлы включены или исключены по какому шаблону:
источник
Ни один из этих ответов не сработал для меня, когда у меня был только список каталогов . Тогда я наткнулся на решение! Вы должны добавить
-r
к,--files-from
потому-a
что не будет рекурсивным в этом сценарии (кто знал ?!).источник