Подтвердить что ты не робот

Скопировать структуру папок (без файлов) из одного места в другое

Я хочу создать клон структуры нашего многотервального файлового сервера. Я знаю, что cp -parents могут перемещать файл и его родительскую структуру, но есть ли способ скопировать структуру каталогов без изменений?

Я хочу скопировать в систему Linux, и наш файловый сервер там установлен CIFS.

4b9b3361

Ответ 1

Вы можете сделать что-то вроде:

find . -type d >dirs.txt

чтобы создать список каталогов, затем

xargs mkdir -p <dirs.txt

для создания каталогов в пункте назначения.

Ответ 2

cd /path/to/directories &&
find . -type d -exec mkdir -p -- /path/to/backup/{} \;

Ответ 3

Вот простое решение с помощью rsync:

rsync -av -f"+ */" -f"- *" "$source" "$target"
  • одна строка
  • нет проблем с пробелами
  • сохранить разрешения

Я нашел это решение там

Ответ 4

Я не знаю, если вы ищете решение для Linux. Если это так, вы можете попробовать следующее:

$ mkdir destdir
$ cd sourcedir
$ find . -type d | cpio -pdvm destdir

Ответ 5

Скопируйте атрибуты каталогов и файлов, но не файлы:

cp -R --attributes-only SOURCE DEST

Затем вы можете удалить атрибуты файлов, если они вас не интересуют:

find DEST -type f -exec rm {} \;

Ответ 6

Это работает:

find ./<SOURCE_DIR>/ -type d | sed 's/\.\/<SOURCE_DIR>//g' | xargs -I {} mkdir -p <DEST_DIR>"/{}"

Просто замените SOURCE_DIR и DEST_DIR.

Ответ 7

Подставив target_dir и source_dir с соответствующими значениями:

cd target_dir && (cd source_dir; find . -type d ! -name .) | xargs -i mkdir -p "{}"

Протестировано на OSX + Ubuntu.

Ответ 8

Следующее решение хорошо работало для меня в различных средах:

sourceDir="some/directory"
targetDir="any/other/directory"

find "$sourceDir" -type d | sed -e "s?$sourceDir?$targetDir?" | xargs mkdir -p

Ответ 9

Это решает даже проблему с пробелами:

В исходном каталоге/источнике:

find . -type d -exec echo "'{}'" \; > dirs2.txt

затем заново создайте его во вновь создаваемом каталоге:

mkdir -p <../<SOURCEDIR>/dirs2.txt

Ответ 10

Питон script от Сергея Колодяжного размещен на Скопировать только папки не файлы?:

#!/usr/bin/env python
import os,sys
dirs=[ r for r,s,f in os.walk(".") if r != "."]
for i in dirs:
    os.makedirs(os.path.join(sys.argv[1],i)) 

или из оболочки:

python -c 'import os,sys;dirs=[ r for r,s,f in os.walk(".") if r != "."];[os.makedirs(os.path.join(sys.argv[1],i)) for i in dirs]' ~/new_destination

FYI:

Ответ 11

Вот решение в php, которое:

  • копирует каталоги (не рекурсивно, только один уровень)
  • сохраняет разрешения
  • в отличие от решения rsync, работает быстро даже с каталогами, содержащими тысячи файлов, поскольку он даже не попадает в папки
  • не имеет проблем с пробелами
  • должно быть легко читать и настраивать

Создайте файл как syncDirs.php с этим содержимым:

<?php
foreach (new DirectoryIterator($argv[1]) as $f) {
    if($f->isDot() || !$f->isDir()) continue;
        mkdir($argv[2].'/'.$f->getFilename(), $f->getPerms());
        chown($argv[2].'/'.$f->getFilename(), $f->getOwner());
        chgrp($argv[2].'/'.$f->getFilename(), $f->getGroup());
}

Запустите его как пользователь с достаточными правами:

sudo php syncDirs.php/var/source/var/destination

Ответ 12

Другой подход заключается в использовании довольно удобного tree и навигации по деревьям каталогов на основе его сильных опций. Есть варианты для каталога только, исключающих пустых каталогов, исключить имена с рисунком, включают в себя только имена с рисунком, и т.д. Проверьте man tree

Преимущество: вы можете редактировать или просматривать список, или если вы делаете много сценариев и часто создаете пакет пустых каталогов

Подход: создайте список каталогов, используя tree, используйте этот список в качестве аргумента для ввода в mkdir

tree -dfi --noreport > some_dir_file.txt

-dfi перечисляет только каталоги, печатает полный путь для каждого имени, заставляет дерево не печатать строки отступа,

--noreport Позволяет печатать отчет о файле и каталоге в конце списка дерева, просто чтобы выходной файл не содержал пуха

Затем перейдите к месту назначения, где вы хотите пустые каталоги и выполните

xargs mkdir < some_dir_file.txt

Ответ 13

Если вы можете получить доступ с компьютера Windows, вы можете использовать xcopy с /T и/E для копирования только структуры папок (/E включает в себя пустые папки)

http://ss64.com/nt/xcopy.html

[EDIT]

Этот использует rsync для воссоздания структуры каталогов, но без файлов. http://psung.blogspot.com/2008/05/copying-directory-trees-with-rsync.html

Возможно, будет лучше:)