Как в Линуксе скопировать список файлов с сохранением дерева каталогов?

Есть текстовой файл, каждая строчка в котором — путь до файла, который нужно скопировать. Сложность в том, что путь содержит подкаталоги. Т.е.:


a/a/file1.txt

a/a/file2.txt

a/b/file1.txt

a/c/file1.txt

И.т.д.


Если делаю через xargs и cp, то получается что все файлы складываются в одну папку-назначение, а нужно сохранять структуру каталогов.


Если делаю через rsync --include-from, то он требует чтобы вместе с именами файлов были указаны все имена каталогов, а их в файле нет. К тому же, я искренне верю, что это избыточная информация.


Еще через rsync нельзя сделать жесткие ссылки, а это может пригодиться.
  • Вопрос задан
  • 7469 просмотров
Решения вопроса 1
homm
@homm Автор вопроса
Отвечаю сам:
Команда cp имеет параметр --parents, отчего результат команды
cp --parents a/b/file1.txt ./files
будет копированием файла file1.txt в ./files/a/b/ Она же, команда cp, имеет чудесный параметр --link, создающий жесткие ссылки вместо копирования.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
ob1
@ob1
Ещё можно сложить файлы в архив tar и потом его распаковать в нужном месте. Это будет более универсальное решение, чем опции GNU cp.
Ответ написан
@ShamblerR
find . -regex ".*\.\(jpg\|jpeg\|gif\|png\|JPG\|JPEG\|GIF\|PNG\)" -print0 | xargs -0 cp --parents --target-directory ./tmp/backup
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы