Назад | Перейти на главную страницу

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

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

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

Только что нашел это:

rsync -a -f"+ */" -f"- *" source/ destination/

http://psung.blogspot.com/2008/05/copying-directory-trees-with-rsync.html

find some/dir -type d -print0 | rsync --files-from=/dev/stdin -0 ...

Другой подход - с найти и mkdir:

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

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

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

find inputdir -type d | cpio -pdumv destdir

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

Аналогично, используя (GNU) tar:

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

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

(cd /home/user/source/; find -type d -print0) | xargs -0 mkdir -p
cp -al 

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

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

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