В моем каталоге src есть следующая файловая структура:
en/
en/a/
en/a/file1 -> ../../en/mp3/file1-longer-name-a
en/a/file2 -> ../../en/mp3/file2-longer-name-a
en/mp3/file1-longer-name-a
en/mp3/file1-longer-name-b
en/mp3/file2-longer-name-a
en/mp3/file3-longer-name-a
Мне интересно скопировать все файлы в en / a / в место назначения, сохранив символические ссылки, а также включить файлы-референты (которые, кстати, все в en /), но не другие файлы в en / mp3 /, если они не указаны любые символические ссылки, которые я передаю.
Я использую следующую команду, которая выполняет очевидную часть работы:
rsync -avRz "${SRC}./en/a" "${DST}"
это передает следующие файлы:
en/
en/a/
en/a/file1 -> ../../en/mp3/file1-longer-name-a
en/a/file2 -> ../../en/mp3/file2-longer-name-a
и я надеюсь, что вы поможете мне настроить аргументы rsync, чтобы следующие файлы также были перенесены:
en/mp3/file1-longer-name-a
en/mp3/file2-longer-name-a
есть ли способ добиться этого без необходимости писать алгоритм для перебора программных ссылок в en / a / и передачи файлов, на которые они указывают, один за другим?
Вы могли бы использовать find
в сочетании с rsync --files-from
параметр:
find "${SRC}./en/a" -type l -exec readlink {} ';'|sort|uniq|rsync -avRz --files-from=- "${SRC}" "${DST}"
find
перечисляет все символические ссылки в папке en / и выполняет readlink для каждой из них.sort
и uniq
)--files-from
параметр установлен на -
чтобы прочитать файлы, которые он должен синхронизировать со стандартным вводом