copia o arquivo para todas as subpastas e todas as subpastas

0

Copie um arquivo em todas as subpastas e subpastas.

Eu tenho um arquivo, digamos, a.txt

Eu quero copiá-lo para todas as subpastas e todas as pastas dessas pastas. Eu tentei criar um script para executar isso, mas continuo recebendo erros.

Alguma ajuda?

o código que eu estava tentando estava abaixo. Mas isso só copia em subdiretórios, não em subdiretórios

for i in ./* # iterate over all files in current dir
do
    if [ -d "$i" ] # if it's a directory
    then
        cp a.txt "$i" # copy a.txt into it
    fi
done
        cd ..
    done
    
por Jackson Hart 23.04.2015 / 20:27

1 resposta

1

Seu script só copia em subdiretórios porque é tudo o que você está mandando fazer ( ./* é todos os arquivos no diretório atual e você nunca vai mais fundo). Você poderia implementá-lo de forma recursiva, mas é provavelmente mais fácil fazer algo como:

find . -mindepth 1 -type d -exec cp a.txt {} \;

Ou para conformidade POSIX e portabilidade máxima :

find . ! -path . -type d -exec cp a.txt {} \;

Isso fará o que você quiser: copie a.txt para cada diretório (sub) + na árvore atual.

Você pode usar a opção -maxdepth para limitar a profundidade dos subdiretórios, se desejar. Você pode usar a opção -mindepth (quando disponível) para definir um limite mínimo de profundidade. No primeiro exemplo acima, usamos -mindepth 1 para ignorar . para evitar emitir um aviso sobre como copiar um arquivo para si mesmo - não é absolutamente necessário, mas é bom não ter avisos.

Para obter mais informações sobre find , consulte a página do manual .

    
por 23.04.2015 / 20:43

Tags