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

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

Мне потребовалось создать зеркальное отображение существующих каталогов Linux и подкаталогов папок, как показано ниже.

у нас есть каталог «/opt/current», в котором есть еще один уровень из 20 подкаталогов и еще один уровень с 50 подкаталогами и так далее... еще несколько более глубоких уровней для подкаталогов, и в общей сложности у нас есть 1000 каталогов от родительского к дочернему. /opt/current смонтирован на устройстве Oracle ZFS.

Как создать точную структуру зеркальных каталогов/подкаталогов в новом расположении /opt/New, а не вручную, как в каталоге «один к одному», и применить разрешения. /opt/New смонтирован на другом устройстве ZFS.

Есть ли способ/скрипт для создания всей структуры каталогов от родительского до дочернего с теми же владельцами/группами/другими разрешениями в /opt/New path, что и в /opt/current path?

спасибо, КГ

решение1

rsync -av --include='*/' --exclude='*' /opt/current/ /opt/New

Это позволит rsyncточно дублировать структуру каталогов, /opt/localизбегая /opt/Newпри этом копирования каких-либо файлов.

Параметр -a( --archive) гарантирует, что все разрешения и т. д. будут сохранены (этот параметр также подразумевает рекурсивное копирование), а -v( --verbose) будет отображать ход выполнения команды.

С помощью --include='*/'мы явно включаем любой каталог в передачу, но исключаем все остальное с помощью --exclude='*'. Порядок этих параметров в командной строке важен.

В /конце /opt/current/также важен символ «», так как без него результатом было бы создание, /opt/New/currentа не непосредственное вписывание /opt/New.

решение2

POSIXly и при условии, что имена каталогов не содержат символов новой строки, а $srcdirи $dstdirявляются абсолютными путями:

(cd -P "$srcdir" && find . -type d | pax -rwdpe "$dstdir/")

Некоторые paxреализации поддерживают получение списков файлов, разделенных символами NUL, для копирования с -0возможностью разрешения имен файлов с символами NUL:

(cd -P "$srcdir" && find . -type d -print0 | pax -0rwdpe "$dstdir/")

( -print0также является расширением, не входящим в POSIX).

решение3

В качестве альтернативыrsync

find /opt/current -type d -print0 | cpio -0pma backup/dir/

решение4

Вы можете создать скрипт, подобный следующему... поместить его в файл:

-- синтаксис скрипта bash/ksh необходимо будет изменить в зависимости от оболочки ----

find . -name "*"|while read line
do
        if [[ -d ${line} ]]
        then 
                echo ${line}
        fi
do

на сервере вы создаете файл

cat file |while read line
do
mkdir ${line}
done

Связанный контент