Я хочу создать клон структуры нашего многотерабайтного файлового сервера. Я знаю, что cp --parents может переместить файл и его родительскую структуру, но есть ли способ скопировать структуру каталогов без изменений?
Я хочу скопировать в систему Linux, и наш файловый сервер смонтирован там CIFS.
Ответы:
Вы можете сделать что-то вроде:
создать список каталогов, затем
для создания каталогов в месте назначения.
источник
find . -type d -print0 >dirs.txt
иxargs -0 mkdir -p <dirs.txt
. Это заставит обе команды использовать нули в качестве разделителей вместо пробелов.xargs
может превышать максимальную длину команды системы, когда вы начинаете работать с сотнями или тысячами заказов, поэтому используйте это с осторожностью. (Найдите предел длины команды с помощьюgetconf ARG_MAX
.) При большом количестве каталогов вам, возможно, придется вместо этого написать сценарий для циклического просмотра вывода.источник
rsync
решение от Чена Леви, ответившего на этот вопрос SO--
- это терминатор опции стандартной утилиты GNU. Это означает «эй, mkdir, любой аргумент после этого, это не флаг, поэтому рассматривайте его как аргумент файла, даже если он начинается с символа '-'».Вот простое решение с использованием rsync:
Я нашел это решение там
источник
rsync -a --include '*/' --exclude '*' "$source" "$target"
Я не знаю, ищете ли вы решение для Linux. Если да, вы можете попробовать это:
источник
Это скопирует атрибуты каталогов и файлов, но не данные файлов:
Затем вы можете удалить атрибуты файлов, если они вам не интересны:
источник
Следующее решение хорошо работало для меня в различных средах:
источник
Это работает:
Просто замените SOURCE_DIR и DEST_DIR.
источник
Это решает даже проблему с пробелами:
В исходном / исходном каталоге:
затем воссоздайте его во вновь созданном каталоге:
источник
Замените
target_dir
иsource_dir
соответствующими значениями:Проверено на OSX + Ubuntu.
источник
Скрипт python от Сергея Колодяжного размещен на Копировать только папки, а не файлы? :
или из оболочки:
К вашему сведению:
источник
Другой подход - использовать
tree
довольно удобный и перемещаться по деревьям каталогов на основе его сильных опций. Есть параметры только для каталога, исключить пустые каталоги, исключить имена с шаблоном, включить только имена с шаблоном и т.д.man tree
Преимущество : вы можете редактировать или просматривать список, или, если вы выполняете много сценариев и часто создаете пакет пустых каталогов
Подход : создайте список каталогов
tree
, используя этот список в качестве аргументов ввода дляmkdir
-dfi
перечисляет только каталоги, печатает полный путь для каждого имени, заставляет дерево не печатать строки отступа,--noreport
Пропускает печать отчета о файле и каталоге в конце списка дерева, просто чтобы выходной файл не содержал лишнего.Затем перейдите к месту назначения, где вы хотите пустые каталоги, и выполните
источник
Копировать каталог только с соответствующим разрешением и владельцем
источник
Однострочное решение:
источник
Если вы можете получить доступ с компьютера Windows, вы можете использовать xcopy с / T и / E для копирования только структуры папок (/ E включает пустые папки)
http://ss64.com/nt/xcopy.html
[РЕДАКТИРОВАТЬ!]
Здесь используется rsync для воссоздания структуры каталогов, но без файлов. http://psung.blogspot.com/2008/05/copying-directory-trees-with-rsync.html
Может быть лучше :)
источник
Вот решение на php, которое:
Создайте файл
syncDirs.php
с таким содержанием:Запустите его от имени пользователя с достаточными правами:
sudo php syncDirs.php /var/source /var/destination
источник