Копировать структуру папок (без файлов) из одного места в другое - PullRequest
74 голосов
/ 02 ноября 2010

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

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

Ответы [ 13 ]

0 голосов
/ 25 июля 2018

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

0 голосов
/ 09 августа 2017

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

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

0 голосов
/ 02 ноября 2010

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

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

...