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



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



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

1423   12  

12 ответов:

вы могли бы сделать что-то вроде:

find . -type d >dirs.txt

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

xargs mkdir -p <dirs.txt

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

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

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

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

я нашел это решение здесь

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

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

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

cp -R --attributes-only SOURCE DEST

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

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

это работает:

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

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

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

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

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

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

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

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

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

в оригинале / источнике реж.:

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

затем воссоздать его во вновь созданном dir:

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

Если вы можете получить доступ с компьютера 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

на самом деле может быть лучше :)

скрипт на питоне от Сергея Колодяжного опубликовано на скопировать только папки, а не файлы?:

#!/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:

вот решение в 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

Comments

    Ничего не найдено.