Як скопіювати дерево каталогів, але не файли в Linux?


17

Я хочу скопіювати близько 200 каталогів і підкаталогів з одного місця в інше, але я не хочу копіювати тисячі файлів у ці каталоги. Я в Linux.

Примітка: мені не вистачає місця для копіювання всього, а потім видалення всіх файлів.

Відповіді:




5

Ще один підхід - з find і mkdir :

find SOURCE -type d -exec mkdir TARGET/{} \;

Просто переконайтесь, що TARGET вже існує або скористайтеся опцією -p mkdir.


3

Ви також можете:

find inputdir -type d | cpio -pdumv destdir

Сила простоти;)


1

Аналогічно, використовуючи (GNU) дьоготь:

find some/dir -type d -print |
tar --no-recursion -T- -c -p -f- |
(cd another/dir && tar -x -p -f-)

Насправді вам не потрібен -print0командний рядок find або командний рядок -0rsync, якщо у вас є назви файлів, які містять символи нового рядка (що можливо, але малоймовірно). Тар (і rsync, і cpio) читають назви файлів по черзі; використання термінатора NULL здебільшого корисне для xargs, який зазвичай читає розділені назви файлів пробілів (і тому не обробляє файли / каталоги з пробілами без їх назв -0).



-1
cp -al 

Скопіював би всі файли із жорсткими посиланнями Та сама структура, однакові дозволи. (зверніть увагу: жорсткі посилання, тому зберігання не втрачено.)


Неможливо створити жорсткі посилання через межі файлової системи
MountainX-for-Monica

Щоправда, але не сказано, що це по всій файловій системі ...
SvennD

-1

ls -d * / @source: знайти. -тип d -print0> dirs.txt @destination: xargs -0 mkdir -p

Це призведе до того, що обидві команди використовуватимуть нулі як роздільники замість пробілів. Зауважте, що порядок -типу d і -print0 важливий!


Це не ясно і здається неправильним. Здається, що це @sourceі @destinationє ознакою для читача, але навіть так це не може працювати.
Закон29
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.