Я хотел бы скопировать из/Ак/Столько пути отсутствуют на/Би/С. (Пожалуйста, предположите, что это пути, и они могут также представлять удаленные местоположения, например, смонтированные через sshfs
)
Я думаю...Есть ли более лаконичный способ, чем написание цикла, перебор файловой системы и выполнение проверки файл за файлом?
Пример содержимого древовидных каталогов/А,/Б,/С:
/А:
/A/1abc/qwe
/A/2abc/asd
/A/3abc/zxc
/A/4abc/rty
/Б:
/A/2abc/asd
/A/3abc/zxc
/С:
/C/1abc/qwe
ожидается: копировать из/Ак/Сединственный путь 4abc/rty
:
/A/4abc/rty -> /C/4abc/rty
Для иллюстрации практических примеров/А,/Б,/С, что приводит к такому сценарию:
- вы делаете резервную копию, копируете с какого-то/источник(/А) некоторым/место назначения(/Б) и некоторые пути не удалось скопировать. Так что вы хотите иметь копию в любом случае отсутствующих. Так что вы находите/другое_назначение(/С), которые могут их принять, и вы хотите скопировать только отсутствующие. Вот примеры ограничений, почему копировать из/Ак/Бможет произойти сбой: диск переполнен; ограничение файловой системы/Б(например, длина имени файла), хотя и не присутствует на/Сфайловая система и т.д.
решение1
Одним из решений является созданиекрепление для союзаиз B и C с C в качестве ветви записи. Тогда задача сводится к копированию из A в B+C только файлов, отсутствующих на B+C, что можно сделать с помощью
rsync -a --ignore-existing /A /B+C
Для крепления на союзе одна из возможностей —unionfs-предохранитель.
unionfs-fuse -o cow /C=RW:/B=RO /B+C
Или unionfs:
mount -t unionfs -o dirs=/C=rw:/B=ro unionfs /B+C