Como alguém copia corretamente um arquivo em várias pastas e subpastas sem sobrescrever o conteúdo do arquivo nas pastas de destino?

1

Na verdade, eu tentei uma resposta existente de: Como copiar um arquivo para várias pastas usando a linha de comando? onde eu usei o comando:

find folder -exec cp file.txt {} \;

Eu queria usar isso porque queria copiar um arquivo chamado 'file.txt' para um diretório chamado 'folder' e todos os seus subdiretórios sem mencionar todos os diretórios do comando.

No entanto, o que isso acabou fazendo foi substituir o conteúdo do arquivo every em 'folder' e em suas subpastas com o conteúdo de 'file.txt'. Por exemplo, se houvesse um 'foo.txt' dentro da pasta, ele ainda manteria o nome 'foo.txt', mas todo o seu conteúdo seria substituído pelo de 'file.txt'. Isso me deixou perplexo e tentei o seguinte sinalizador interativo:

find folder -exec cp -i file.txt {} \;

e eu sobrescrevi prompts para cada arquivo no diretório 'folder' e todos os seus subdiretórios, mesmo que os nomes fossem todos diferentes.

Alguém por favor pode me ajudar a descobrir o que está acontecendo e qual deve ser o comando apropriado?

    
por Shudipto Amin 10.03.2016 / 00:53

1 resposta

1

Você deve restringir find a apenas listar diretórios :

find folder -type d -exec cp file.txt {} \;

Além disso, no futuro, quando você estiver cp 'em um diretório no qual o nome do diretório vem de outro comando, use a opção -t para ter certeza de que ele realmente é um diretório:

find folder -type d -exec cp -t {} file.txt \;

Em man cp :

-t, --target-directory=DIRECTORY
      copy all SOURCE arguments into DIRECTORY

Portanto, se um arquivo for fornecido como um argumento para -t , cp será automaticamente reclamado.

Outra resposta para essa pergunta é usar -type d .

    
por muru 10.03.2016 / 01:10