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