Copie a estrutura de diretórios sem copiar arquivos no Mac OS X


7

Eu gostaria de duplicar a estrutura de diretórios em algum diretório para outro, sem copiar nenhum arquivo real. No lugar dos arquivos, eu gostaria de um arquivo em branco com o mesmo nome ou um link simbólico para o local original.

Como eu poderia fazer isso no OS X? Ferramentas de linha de comando (rsync / find / tar / whatever), shell scripts, etc., são todas aceitáveis, o software que tenho que comprar provavelmente não é.

Respostas:


10
user@osx:~/from$ find . -type d -exec mkdir -p ~/to/{} \;
user@osx:~/from$ find . -type f -exec ln -s ~/from/{} ~/to/{} \;

ou

user@osx:~/from$ find . -type f -exec touch ~/to/{} \;

Tanto isto como o lndir solução funcionou. Eu "aceitei" isso porque o lndir vem com o X e pode ir embora ou não estar presente em um sistema. Se você tiver o lndir, é mais fácil de usar.
ShreevatsaR

5 anos ainda funciona. Eu não tenho sido um usuário sério de linha de comando Unix por mais de 15 anos, então isso traz de volta ótimas memórias (dor :-)
Mark Levison

7

Experimentar lndir. De sua página de manual:

The lndir program makes  a  shadow  copy  todir  of  a  directory  tree
fromdir,  except  that  the shadow is not populated with real files but
instead with symbolic links pointing at the real files in  the  fromdir
directory tree.

Isso é mágica do OS X!
whitequark

Uau, isso seria exatamente o que eu quero. Está em / usr / X11 por algum motivo (a manpage também está listada em X). Por alguma razão, quando eu corro, gosto lndir dir1 dir2, Eu recebo dir1: No such file or directory.
ShreevatsaR

Oh, conserte. A manpage diz The fromdir argument […] is relative to todir (not the current directory). Então, se você tem dir1 e dir2 no diretório atual, você tem que digitar lndir ../dir1 dir2. Naturalmente, digitar o caminho completo para dir1 também funciona. Obrigado novamente.
ShreevatsaR

4

Outra solução que funciona para mim é usar rsync e excluir todos os arquivos, por exemplo

$ rsync -a /path/from/ /path/to/ --include \*/ --exclude \*

o --include \*/ especifica que todos os diretórios devem ser copiados e --exclude \* especifica que todos os arquivos devem ser excluídos da cópia.

A beleza disso é que a nova hierarquia de diretórios possui os mesmos atributos, registros de data e hora, permissões, etc. como o original.


1
Eu concordo, ter os atributos certos é ótimo. Você sabe se pode fazer algo sobre os arquivos, para que eles existam (como arquivos vazios ou links simbólicos)?
ShreevatsaR

Desculpe - perdi essa parte da primeira vez - pode ser possível com o rsync, mas vou precisar pensar um pouco mais.
Paul R

1

Aqui está mais uma variação do rsync método, que manterá os ícones de pasta e marcadores de localização:

rsync -Ea /path/from/ /path/to/ --include="*/"  --include="Icon*" --exclude="*"

Isso não copia aliases de arquivos, então você pode querer combiná-lo com a resposta do whitequark acima.


0

Isto irá encontrar os diretórios dentro temp, remova o líder / home / bryan / deles e crie os novos diretórios

  for i in `find /home/bryan/temp -type d| sed 's/\/home\/bryan\///g'`
  do mkdir $i
  done

Eu sugiro digitar o código uma linha de cada vez (desta forma, ponto e vírgula (não mostrado) será colocado corretamente)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.