ti-enxame.com

Copie arquivos de um diretório em um diretório existente

No bash eu preciso fazer isso:

  1. pegar todos os arquivos em um diretório

  2. copiá-los em um diretório existente

Como eu faço isso? Eu tentei cp -r t1 t2 (ambos t1 e t2 são diretórios existentes, t1 tem arquivos nele) mas ele criou um diretório chamado t1 dentro de t2, eu não quero isso, eu preciso dos arquivos em t1 para ir diretamente dentro de t2. Como eu faço isso?

210
David Chang

O que você quer é:

cp -R t1/. t2/

O ponto no final diz para copiar o conteúdo do diretório atual, não o próprio diretório. Este método também inclui arquivos e pastas ocultos.

345
Nick

Se você quiser copiar algo de um diretório para o diretório atual, faça o seguinte:

cp dir1/* .

Isso pressupõe que você não está tentando copiar arquivos ocultos.

30
Karl Giesing
cp dir1/* dir2

Ou se você tiver diretórios dentro de dir1 que você gostaria de copiar também

cp -r dir1/* dir2
28
Bertrand Marron

Supondo que t1 é a pasta com arquivos, e t2 é o diretório vazio. O que você quer é algo assim:

Sudo cp -R t1/* t2/

Tenha em mente que, para o primeiro exemplo, t1 e t2 precisam ser os caminhos completos ou relativos (com base em onde você está). Se você quiser, pode navegar até a pasta vazia (t2) e fazer isso:

Sudo cp -R t1/* ./

Ou você pode navegar para a pasta com arquivos (t1) e fazer isso:

Sudo cp -R ./* t2/

Nota: O sinal * (ou curinga) significa todos os arquivos e pastas. A bandeira -R significa recursivamente (tudo dentro de tudo).

8
Konkret
cp -R t1/ t2

A barra no diretório de origem altera ligeiramente a semântica, portanto, copia o conteúdo, mas não o próprio diretório. Também evita os problemas com globbing e arquivos invisíveis que a resposta de Bertrand tem (copiar t1/* erra arquivos invisíveis, copiando `t1/* t1 /.* 'copia t1 /. E t1/.., o que você não quer).

3
Gordon Davisson

Dependendo de alguns detalhes, talvez seja necessário fazer algo assim:

r=$(pwd)
case "$TARG" in
    /*) p=$r;;
    *) p="";;
    esac
cd "$SRC" && cp -r . "$p/$TARG"
cd "$r"

... isso basicamente muda para o diretório SRC, copia-o para o destino e retorna para onde você começou.

A confusão extra é lidar com alvos relativos ou absolutos.

(Isso não depende da semântica sutil do próprio comando cp ... sobre como ele trata as especificações de origem com ou sem trailing/... pois não tenho certeza se essas são estáveis, portáteis e confiáveis ​​além de apenas GNU cp e não sei se eles continuarão a ser assim no futuro).

2
Jim Dennis

Para dentro de algum diretório, este será usado como um todo, pois copia todo o conteúdo de "folder1" para o novo diretório "folder2" dentro de algum diretório.

$ (pwd) irá obter o caminho para o diretório atual.

Observe o ponto (.) Após a pasta1 para obter todo o conteúdo dentro da pasta1

cp -r $(pwd)/folder1/. $(pwd)/folder2
0
ashish Kumar