Как скопировать дерево каталогов, но не файлы в Linux?

17

Я хочу скопировать около 200 каталогов и подкаталогов из одного места в другое, но я не хочу копировать тысячи файлов в этих каталогах. Я на Linux.

Примечание: у меня недостаточно места, чтобы скопировать все и удалить все файлы.

Кайл Вест
источник

Ответы:

9
find some/dir -type d -print0 | rsync --files-from=/dev/stdin -0 ...
Игнасио Васкес-Абрамс
источник
5

Другой подход с помощью find и mkdir :

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

Просто убедитесь, что TARGET уже существует, или используйте опцию -p mkdir.

Панос Ронтогианнис
источник
3

Вы также можете сделать:

find inputdir -type d | cpio -pdumv destdir

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

Pilou
источник
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).

larsks
источник
1
(cd /home/user/source/; find -type d -print0) | xargs -0 mkdir -p
SergioAraujo
источник
-1
cp -al 

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

SvennD
источник
Невозможно создать жесткие ссылки через границы файловой системы
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