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

7

Gostaria de duplicar a estrutura do diretório 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 é.

    
por ShreevatsaR 04.08.2010 / 00:08

5 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/{} \;
    
por 04.08.2010 / 00:11
6

Experimente 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.
    
por 04.08.2010 / 00:13
2

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.

    
por 04.08.2010 / 09:57
1

Aqui está mais uma variação do método rsync , que manterá í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.

    
por 23.07.2014 / 15:16
0

Isto irá encontrar os diretórios dentro temp, remover 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

Sugiro digitar o código uma linha de cada vez (desta forma, os pontos-e-vírgulas (não mostrados) serão colocados corretamente)

    
por 04.08.2010 / 00:25