Eu tenho a seguinte árvore, onde f
estão os arquivos enquanto src
e d
os diretórios ( f
podem estar ocultos ou não):
src/f1
src/f2
...
src/d1
src/d2
src/d3
...
Desejo replicar a mesma estrutura em uma dst
pasta, mas excluir todos os arquivos presentes na src
pasta (ou seja f1
, f2
, etc. na árvore acima, mas NÃO o conteúdo de d1
, d2
e d3
das outras pastas). Em outras palavras, quero copiar de src
para dst
apenas as pastas e todo o seu conteúdo (arquivos, pastas, link, dispositivos, etc.).
Devo usar rsync
e de preferência apenas um --exclude-from
arquivo (mas qualquer outra forma de uso rsync
é bem vinda).
Tentei colocar /*
no arquivo de exclusão, pois /
me permite ancorar em src
e *
significa "combinar todas as coisas, exceto barras ( /
)", mas resulta em uma dst
pasta vazia.
Muito obrigado
cara rsync diz:
Então tente
rsync -avr -f"+ */" -f"- *" /src/ /dest/
-f"+ */"
adicionará diretórios quando-f"- *"
removerá arquivos em todos os lugares.Como disse @Kusalananda, isso evitará qualquer arquivo em todas as subárvores.
rsync -avr -f"+ */" -f"- /*" /src/ /dest/
oursync -avr --include="*/" --exclude="/*" /src/ /dest/
sincronizará os arquivos nos subdiretórios da árvore.Excluindo tudo no diretório de origem com
/*
funciona, você só precisa incluir os diretórios novamente:--exclude='/*'
exclui todos os arquivos/diretórios no diretório de origem--include='/*/'
substitui a exclusão e inclui diretórios no diretório de origem novamente, deve ser escrito antes da exclusão-a
modo de arquivo, atalho para-rlptgoD
-r
recursar em diretórios-l
copiar links simbólicos como links simbólicos-p
preservar permissões-t
preservar tempos de modificação-g
preservar grupo-o
preservar proprietário (somente superusuário)-D
preservar arquivos de dispositivo (somente superusuário) / arquivos especiais-v
aumentar verbosidade