Есть ли способ поместить комментарии в файл rsync --files-from?

10

У меня есть файл, который rsync использует как --files-from:

dir1
dir2
dir3

Я хочу иметь возможность размещать комментарии над каждой записью в директории следующим образом:

# my dir1 comment
dir1

#dir2 comment
dir2

#yet another comment
dir3

но rsync жалуется "Нет такого файла или каталога"

Пока что я пробовал #, //, - ,, SPACE

Есть ли способ закомментировать / отключить записи?

user98989
источник
Я не знаю ни одного механизма комментирования для files-fromфайла.
jw013

Ответы:

17

Согласно manстранице наrsync:

"... Пустые строки в FILE и строки, начинающиеся с ';' или "#" игнорируются ... "

Я только что провел быстрый тест, и действительно, #и ;строки игнорируются.

rob_7cc
источник
Я не могу секунд, ;но #(глядя здесь , поиск ‚когда правила ... '). → Так что, возможно, #немного безопаснее ...
Фрэнк
Не на этой справочной странице rSync : linux.die.net/man/1/rsync , ни на этой другой: ss64.com/bash/rsync.html . Не могли бы вы отослать ваши?
Сопалахо де Арриерес
1
Ваша страница действительно показывает, что строки, начинающиеся с #, являются комментариями: linux.die.net/man/1/rsync указывает «... Когда правила читаются из файла, пустые строки игнорируются, как и строки комментариев, начинающиеся с a lq # rq. ... "(lq и rq - обозначения для левой и правой цитаты ... Я не знаю, почему эта веб-страница отображает кавычки в виде этих сокращений). Независимо от этого, # в исключающем файле rsync являются комментариями. Возможно, другая справочная страница, на которую вы ссылаетесь, просто старая. Вы можете просмотреть историю журналов rsync здесь: git.samba.org/?p=rsync.git;a=log
rob_7cc
Лучше всего взглянуть на страницу руководства на платформе, на которой вы разрабатываете, чтобы определить версию rsync, которую вы используете; вы можете найти на странице справки, как комментарии обрабатываются этой версией rsync.
rob_7cc
10

Сделайте, grep -v '^#' file > /tmp/filetmpа затем запустите rsync на/tmp/filetmp

В зависимости от вашей оболочки вы можете избежать временного файла (это действительно в Bash):

rsync --files-from <(grep -v '^#' file) …

Странно выглядящий <( … )синтаксис - это то, что Bash называет подстановкой процесса .

Дом
источник
3
Я добавил шаблон в ваш grep для вас - я полагаю, это то, что вы имели в виду ... Я собираюсь добавить в трюк bash, не стесняйтесь отменить одно или оба изменения, если вы не согласны.
Дероберт
Вы можете использовать, --files-from=-чтобы rsyncпрочитать список из стандартного ввода.
Кусалананда
-1

состояние на данный момент (протокол протокола rsync версии 3.1.1 версия 31): все строки, начинающиеся с #или ;игнорируемые, даже не manимеют информации об этом (мой случай был другим, я хотел скопировать файл с именем ;_charи был удивлен, что даже не использовал - опция -from0 - после смены строки ./;_charона начала работать). Кажется, что используется та же самая функция синтаксического анализа, что и для опций, --include-fromили --exclude-from для этих двух manстраниц опций упоминается: Blank lines in the file and lines starting with ’;’ or ’#’ are ignored

ddzialak
источник