Я хочу скопировать около 200 каталогов и подкаталогов из одного места в другое, но я не хочу копировать тысячи файлов в этих каталогах. Я на Linux.
Примечание: у меня недостаточно места, чтобы скопировать все и удалить все файлы.
linux
command-line-interface
rsync
copy
Кайл Вест
источник
источник
rsync -a --include='*/' --exclude='*' ${source} ${destination}
.источник
Другой подход с помощью find и mkdir :
Просто убедитесь, что TARGET уже существует, или используйте опцию -p mkdir.
источник
Вы также можете сделать:
Сила простоты;)
источник
Аналогично, используя (GNU) tar:
В действительности вам не нужно указывать в командной строке
-print0
find или-0
в командной строке rsync, если только у вас нет имен файлов, содержащих символы новой строки (что возможно, но крайне маловероятно). Tar (и rsync, и cpio) считывают имена файлов построчно; использование терминатора NULL в основном полезно сxargs
, который обычно читает разделенные пробелами имена файлов (и поэтому не обрабатывает файлы / каталоги с пробелами в их именах без-0
).источник
источник
Скопировал бы все файлы с жесткими ссылками. Та же структура, те же разрешения. (примечание: жесткие ссылки, поэтому хранилище не потеряно.)
источник
ls -d * / @source: find. -type d -print0> dirs.txt @destination: xargs -0 mkdir -p
Это заставит обе команды использовать пустые значения в качестве разделителей вместо пробелов. Обратите внимание, что порядок -type d и -print0 важен!
источник
@source
и@destination
являются указаниями для читателя, но даже в этом случае это не может работать.