Используйте rsync.
rsync -rltpDvh --chown root:root build/ /usr/
Это значит:
r
:Рекурсивный l
:Копировать ссылки t
:Сохранить метки времени p
:Сохранить разрешения D
:--devices
v
:Подробно h
:Удобочитаемый прогресс Если он у вас не установлен, сначала используйте управление пакетами, чтобы установить этот замечательный инструмент:)
Похожие материалы:
Комбинацию find
и cpio
можно использовать для рекурсивного копирования всех файлов и подпапок из folder1
в folder2
. С tee
между ними вы можете записать все имена файлов (относительноfolder1
)в outputfile
.
cd folder1 && find. -depth | tee outputfile | cpio -pdm folder2
Команда cd folder1
необходима, поскольку cpio
хочет получить имена файлов относительно исходной папки.
folder2
должен быть указан либо абсолютно, либо относительно folder1
.
Чтобы копировать только файлы, вы можете изменить команду find
:
... find. -type f -maxdepth 1...
С командами 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")