Achei isso:
rsync -a -f"+ */" -f"- *" source/ destination/
Eu quero copiar cerca de 200 diretórios e amp; subdiretórios de um local para outro, mas não quero copiar os milhares de arquivos nesses diretórios. Eu estou no Linux.
Observação: não tenho espaço suficiente para copiar tudo e, em seguida, excluo todos os arquivos.
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/{} \;
Assegure-se de que TARGET já exista ou use a opção -p do mkdir.
Você também pode fazer:
find inputdir -type d | cpio -pdumv destdir
O poder da simplicidade;)
Da mesma forma, usando (GNU) tar:
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 do -print0
na linha de comando de localização ou do -0
na linha de comando do rsync, a menos que você tenha nomes de arquivos que contenham caracteres de nova linha (o que é possível, mas altamente improvável). Tar (e rsync e cpio) leem nomes de arquivos linha por linha; usar um terminador NULL é bastante útil com xargs
, que normalmente lê nomes de arquivos separados por espaços em branco (e, portanto, não manipula 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
Copia todos os arquivos com links físicos. Mesma estrutura, mesmas permissões. (nota: hard links, então nenhum armazenamento perdido).
ls -d * / @source: find. -tipo d -print0 > dirs.txt @destinação: xargs -0 mkdir -p
Isso fará com que ambos os comandos usem nulos como separadores em vez de espaços em branco. Note que a ordem de -type d -print0 é importante!