68

Как я могу скопировать структуру каталогов, dir1, в dir2 (со всеми подкаталогами) в Unix, используя окно терминала?

3 ответа3

98
cp -rf /source/path/ /destination/path/

-r = рекурсивно, копирует все подкаталоги

-f = force, если существующий файл назначения не может быть открыт, удалите его и попробуйте снова

Примечание. Будьте осторожны при использовании флага -f поскольку он принудительно перезапишет все, что вы копируете. Спасибо @Nifle за это предложение.

Вы можете использовать подстановочный знак *, чтобы скопировать все файлы в каталоге, если вам нужно.

10

Хотя ответы cp -R верны (кстати, регистр флага в BSD должен быть прописным, оба поддерживаются в linux), существует старое заклинание с использованием tar:

$ tar cf - . | (cd DIR; tar xf - )

Какого черта ты это сделал? Потому что у tar довольно сложное понимание ссылок, как жестких, так и символических.

Хотите ли вы, чтобы копия заменила существующие символические ссылки на те, которые имеют такой же текст? Или со ссылками на одну и ту же цель (корректировка относительных путей для компенсации)? Или с побитовыми копиями цели?

Если два файла в оригинале жестко связаны, должна ли новая структура иметь две копии данных или только одну?

Решения, решения. Tar имеет разумные значения по умолчанию, но позволяет вам быть очень точным.

6

мне нравится

cp -axv source dest

Rsync - еще один хороший инструмент для этого

rsync -va source dest

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .