Получить путь к каждому файлу, скопированному из одной папки в другую

Используйте rsync.

rsync -rltpDvh --chown root:root build/ /usr/

Это значит:

  • r:Рекурсивный
  • l:Копировать ссылки
  • t:Сохранить метки времени
  • p:Сохранить разрешения
  • D:--devices
  • v:Подробно
  • h:Удобочитаемый прогресс

Если он у вас не установлен, сначала используйте управление пакетами, чтобы установить этот замечательный инструмент:)

Похожие материалы:

1
11.06.2020, 17:16
2 ответа

Комбинацию findи cpioможно использовать для рекурсивного копирования всех файлов и подпапок из folder1в folder2. С teeмежду ними вы можете записать все имена файлов (относительноfolder1outputfile.

cd folder1 && find. -depth | tee outputfile | cpio -pdm folder2

Команда cd folder1необходима, поскольку cpioхочет получить имена файлов относительно исходной папки.

folder2должен быть указан либо абсолютно, либо относительно folder1.

Чтобы копировать только файлы, вы можете изменить команду find:

... find. -type f -maxdepth 1...
1
28.04.2021, 23:36

С командами POSIX и при условии, что имена файлов и каталогов не содержат символов новой строки:

src=/some/dir
dst=/some/other/dir
file_list=/path/to/list.txt
(cd -P -- "$src" && find. |
  tee -- "$file_list" |
  pax -rwdpe -- "$dst")

Пути будут относиться к каталогам $srcили $dst(, которые должны существовать заранее ).

Реализация GNU cp(, найденная в Ubuntu ), имеет параметр -v, который сообщает, что он делает.

LC_ALL=C cp -va -- "$src" "$dst" > "$file_list"

Будет создан list.txt, который содержит что-то вроде:

'/some/dir' -> '/some/other/dir'
'/some/dir/file' -> '/some/other/dir/file'
[...]

Другим вариантом может быть использованиеtar(нестандартной команды, но Ubuntu поставляется с GNU tarпо умолчанию):

(cd -P -- "$src" && tar cf -.) |
  (cd -P -- "$dst" && tar xvf - > "$file_list")
2
28.04.2021, 23:36

Теги

Похожие вопросы