У меня есть каталог символических ссылок A/, указывающих на реальные файлы в каталоге dir.

Символьные ссылки в / могут быть удалены, но файлы содержимого / никогда не удаляются.
Например, A / выглядит так:

A/
 --B/ 
   --link1 -> contents/file1.txt<br/>
 --C/
   --link2 -> contents/file3.txt<br/>

содержимое / выглядит так:

contents/
  --file1.txt
  --file2.txt
  --file3.txt
  --file4.txt

Таким образом, файлы в содержимом могут быть не связаны никем. Я хотел бы использовать rsync для синхронизации обоих каталогов, но только для передачи файлов, которые на самом деле указаны по ссылкам. Т.е. передать file1.txt и file3.txt.
Я хотел бы использовать rsync для передачи ссылок в A/ следующих ссылках и замены имен ссылок в dest на путь к указанному файлу.

rsync --link A/* dest/ 

И в итоге:

dest/
  --contents/
    --file1.txt
    --file3.txt

Спасибо

1 ответ1

0

Я не смог сделать это исключительно с помощью rsync, а с помощью комбинации для find и rsync. Сначала я создал снимок содержимого dir, выполнив

find  A/ -type l -exec readlink  {} \; 

Затем я создал каталог content.snapshot, в котором создал символическую ссылку, указывающую на файл в каталоге content.snapshot для каждого из файлов, возвращаемых командой find.

Наконец я перезапустил dir content.snapshot вместо dir содержимого. Включение удаления файла и переход по ссылке в команде rsync.

Структура dir выглядит так:

contents/
  --file1.txt
  --file2.txt
  --file3.txt
  --file4.txt

contents.snapshot/
  --contents/
    --file1.txt -> ../../contents/file1.txt
    --file3.txt -> ../../contents/file3.txt

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .