Respostas:
Apenas encontrei isso:
rsync -a -f"+ */" -f"- *" source/ destination/
http://psung.blogspot.com/2008/05/copying-directory-trees-with-rsync.html
find some/dir -type d -print0 | rsync --files-from=/dev/stdin -0 ...
Outra abordagem é com find e mkdir :
find SOURCE -type d -exec mkdir TARGET/{} \;
Apenas verifique se o TARGET já existe ou use a opção -p do mkdir.
Da mesma forma, usando o tar (GNU):
find some/dir -type d -print |
tar --no-recursion -T- -c -p -f- |
(cd another/dir && tar -x -p -f-)
Você realmente não precisa da -print0
linha de comando on find ou da linha -0
rsync, a menos que tenha nomes de arquivos que contenham caracteres de nova linha (o que é possível, mas altamente improvável). Tar (e rsync e cpio) leem os nomes de arquivos linha por linha; o uso de um terminador NULL é bastante útil xargs
, que normalmente lê nomes de arquivos separados por espaços em branco (e, portanto, não lida com arquivos / diretórios com espaços em seus nomes sem -0
).
(cd /home/user/source/; find -type d -print0) | xargs -0 mkdir -p
cp -al
Copiaria todos os arquivos com links físicos. Mesma estrutura, mesmas permissões. (nota: links físicos, para que não haja perda de armazenamento.)
ls -d * / @source: encontre. -type d -print0> dirs.txt @destination: xargs -0 mkdir -p
Isso fará com que ambos os comandos usem nulos como separadores em vez de espaços em branco. Observe que a ordem de -type de -print0 é importante!
@source
e @destination
são indicações para o leitor, mas mesmo assim isso não pode funcionar.
rsync -a --include='*/' --exclude='*' ${source} ${destination}
.