Скопируйте каталог в Unix

78

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

Динеш Кумар
источник
2
"cp -r / dir1 / dir2" Это правильно ??
Динеш Кумар
Да это верно. Вы можете пометить один из ответов как ваше решение.
Кробертс

Ответы:

115
cp -rf /source/path/ /destination/path/

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

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

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

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

qroberts
источник
11
Я не согласен, что вы должны использовать fфлаг. -f if an existing destination file cannot be opened, remove it and try again
Секс
Лично я всегда использую флаг -f. Это не хорошая практика, так что, возможно, вы правы.
Кробертс
Если вы знаете, что он делает, и вы знаете, что делаете, это нормально. Но в этом случае с неопытным пользователем это может не подойти.
2010
@ Да, я понимаю, что ты говоришь. Просто если он заставит его, шансы на его работу лучше, чем если бы он этого не сделал. Все зависит от того, что вы делаете, и от того, что вы понимаете, что он делает.
Кробертс
Если вы добавите в свой ответ примечание о том, что -fфлаг полезен, если вы копируете <source> поверх <dest> (как при перезаписи вещей в <dest>), я сам добавлю голос и удалю свой ответ)
Nifle
11

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

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

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

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

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

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

dmckee
источник
9

мне нравится

cp -axv source dest

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

rsync -va source dest
Пит Эшдаун
источник