como criar diretórios Linux e estrutura de subdiretórios sem arquivos dele

como criar diretórios Linux e estrutura de subdiretórios sem arquivos dele

Recebi o requisito de criar uma imagem espelhada de diretórios e subdiretórios de pastas existentes do Linux, conforme abaixo.

temos o diretório "/opt/current" que tem outra camada de 20 subdiretórios e mais uma camada com 50 subdiretórios e assim por diante... mais algumas camadas mais profundas para subdiretórios e no total temos 1000 diretórios de pai para filho. o /opt/current é montado no dispositivo Oracle ZFS.

Como criar uma estrutura exata de diretórios/subdiretórios espelhados no novo local /opt/New não manualmente como um para um diretório e aplicar permissões. o /opt/New é montado em outro dispositivo ZFS.

Existe uma maneira/script de criar toda a estrutura de diretórios de pai para filho com a mesma permissão de proprietário/grupo/outra em/opt/Novo caminho como em/opt/caminho atual?

obrigado, C.G.

Responder1

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

Isso seria usado rsyncpara duplicar exatamente a estrutura de diretórios de /opt/localin /opt/New, evitando copiar quaisquer arquivos.

A -aopção ( --archive) garantiria que todas as permissões etc. fossem preservadas (esta opção também implica uma cópia recursiva) e -v( --verbose) daria uma indicação do progresso do comando.

Com --include='*/'incluímos explicitamente qualquer diretório na transferência, mas excluímos todo o resto com --exclude='*'. A ordenação destas opções na linha de comando é importante.

O /final /opt/current/também é importante, pois sem ele o resultado seria criar /opt/New/currentem vez de escrever /opt/Newdiretamente.

Responder2

POSIXly e assumindo que nomes de diretório não contêm caracteres de nova linha e $srcdirsão $dstdircaminhos absolutos:

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

Algumas paximplementações suportam a obtenção de listas de arquivos delimitados por NUL para copiar com uma -0opção para permitir nomes de arquivos com NULs:

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

( -print0também é uma extensão não POSIX).

Responder3

Alternativamente pararsync

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

Responder4

Você pode criar um script como o seguinte... colocá-lo em um arquivo:

-- a sintaxe do script bash/ksh precisará mudar dependendo do shell ----

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

no servidor você está criando o arquivo

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

informação relacionada