Copie um único arquivo do diretório principal recursivamente em todos os diretórios dentro

0

Eu estou em um servidor dedicado usando o CentOS, e neste servidor eu tenho mais de 5000 diretórios em um diretório principal.

No diretório principal, tenho um index.php . Eu gostaria de copiar este index.php em todos os 5000 + diretórios, mas a única maneira que eu sei é como fazê-lo manualmente.

Existe um caminho através da linha de comando que eu posso inserir algo como cp e fazê-lo funcionar no diretório? Eu copiai todo o caminho através de todos os diretórios e sub-diretórios dentro deste diretório principal que eu estou começando.

    
por chris 23.09.2012 / 11:18

1 resposta

3
find . -mindepth 1 -type d -exec echo cp index.php {} \;

O comando acima copia o arquivo index.php do seu diretório atual para todos os subdiretórios, recursivamente - mas não imediatamente.

Quando você tiver certeza de que ele imprime todos os comandos de cópia corretos, remova o echo e execute-o. echo é apenas uma proteção para mostrar a você o que todo o comando faria antes de realmente fazer algo que você talvez não queira.

Outra abordagem interessante - obrigado @RedGrittyBrick - seria link simbólico dos arquivos em vez de simplesmente copiar eles. Dessa forma, os arquivos index.php nos subdiretórios seriam apenas um atalho, por assim dizer, para o diretório raiz e não duplicados. Para fazer isso, no comando acima, altere cp para ln -s . Dessa forma, quando você altera o arquivo "master" index.php , todos os outros nos subdiretórios ainda apontam para ele e, portanto, também mudam automaticamente quando visualizados.

Para completar, todo o comando, quebrado, funciona assim:

  • find . , pesquisa no diretório atual
  • -mindepth 1 , indo pelo menos um diretório de profundidade
  • -type d , localize apenas diretórios
  • -exec … , execute o comando echo cp index.php {} , onde {} é substituído por todos os diretórios encontrados. Este comando é chamado várias vezes, uma vez para cada subdiretório.
por 23.09.2012 / 11:25