Как скопировать дерево каталогов, но не файлы в 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) tar:

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

В действительности вам не нужно указывать в командной строке -print0find или -0в командной строке rsync, если только у вас нет имен файлов, содержащих символы новой строки (что возможно, но крайне маловероятно). Tar (и rsync, и cpio) считывают имена файлов построчно; использование терминатора NULL в основном полезно с xargs, который обычно читает разделенные пробелами имена файлов (и поэтому не обрабатывает файлы / каталоги с пробелами в их именах без -0).



-1
cp -al 

Скопировал бы все файлы с жесткими ссылками. Та же структура, те же разрешения. (примечание: жесткие ссылки, поэтому хранилище не потеряно.)


Невозможно создать жесткие ссылки через границы файловой системы
MountainX-for-Monica

Правда, но не сказано, что это было в файловой системе ...
SvennD

-1

ls -d * / @source: find. -type d -print0> dirs.txt @destination: xargs -0 mkdir -p

Это заставит обе команды использовать пустые значения в качестве разделителей вместо пробелов. Обратите внимание, что порядок -type d и -print0 важен!


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