
Как скопировать структуру каталогов dir1 в dir2 (со всеми подкаталогами) в Unix с помощью окна терминала?
решение1
cp -rf /source/path/ /destination/path/
-r
= рекурсивный, копирует все подкаталоги
-f
= принудительно, если существующий файл назначения не может быть открыт, удалите его и повторите попытку
ПримечаниеБудьте осторожны при использовании -f
флага, так как он принудительно перезапишет все, что вы копируете. Спасибо @Nifle за это предложение.
При необходимости вы можете использовать подстановочный знак *, чтобы скопировать все файлы в каталоге.
решение2
Хотя cp -R
ответы верны (кстати, флаг в BSD должен быть заглавным, оба поддерживаются в Linux), естьстарое заклинание с использованием смолы:
$ tar cf - . | (cd DIR; tar xf - )
Зачем, черт возьми, ты это делаешь? Потому что tar имеет довольно сложное пониманиессылкии жестко, и символично.
Хотите ли вы скопировать, чтобы заменить существующие символические ссылки на те, которые имеют тот же текст? Или на ссылки на ту же цель (корректируя относительные пути для компенсации)? Или на побитовые копии цели?
Если два файла в оригинале жестко связаны, должна ли новая структура содержать две копии данных или только одну?
Решения, решения. Tar имеет разумные значения по умолчанию, но позволяет вам быть очень конкретным.
решение3
Мне нравится
cp -axv source dest
Rsync — еще один хороший инструмент для этого.
rsync -va source dest