Como copiar o caminho do diretório de preservação de arquivo no Linux?

88

Eu tenho projetos Eclipse e o arquivo ".project" neles, a estrutura de diretórios se parece com ' myProject/.project'. Quero copiar esses arquivos '.project' para outro diretório, mas quero que o nome do diretório anexo seja preservado.

Digamos que eu tenho ' a/myProject/.project', quero copiar ' myProject/.project' para ' b', para que seja ' b/myProject/.project', mas ' b/myProject' não existe. Quando tento um:

 cp -r ./myProject/.project ../b

copia apenas o arquivo '.project', sem o diretório 'myProject'. Por favor informar.

dhblah
fonte

Respostas:

153

A opção que você precisa é --parents, por exemplo:

jim@prometheus:~$ cp --parents test/1/.moo test2/
jim@prometheus:~$ ls -la test2/
total 42
drwxr-xr-x   3 jim jim    72 2010-09-14 09:32 .
drwxr-xr-x 356 jim jim 43136 2010-09-14 09:32 ..
drwxr-xr-x   3 jim jim    72 2010-09-14 09:32 test
jim@prometheus:~$ ls -la test2/test/1/.moo
-rw-r--r-- 1 jim jim 0 2010-09-14 09:32 test2/test/1/.moo
James Yale
fonte
7

Use tarcom algo como:

mkdir b; tar cpf - myProject/ | tar xpf - -C b/

(Não testado. Faça um teste a seco primeiro ou tente em um cenário de maquete.)

Lorenzog
fonte
funciona surpreendentemente bem! No mac: mkdir b; tar -c -f new.tar $ (cat myP); tar -x -f new.tar -C b /; #myP é arquivo de texto com lista de caminhos-de-arquivos a serem copiados
alexey
4

Primeiro use mkdir -ppara criar a pasta de destino com a criação de caminho pai recursivo. Em seguida, copie o conteúdo para a pasta de destino:

mkdir -p b/myProject/.project
cp -r a/myProject/.project/file b/myProject/.project
Weimin
fonte
3
cp -P a/myProject/.project b

Veja man cppara mais informações.

Maxfer
fonte
Isso não parece ajudar. Ele apenas copia '.project' em b, mas não copia 'myProject'.
precisa saber é o seguinte
3

Eu uso o cpio em combinação com o find. Explicação aqui .

Exemplo para o seu caso de uso:

find /a/myProject/.project/ -type f | cpio -p -dumv /b/.

Este comando localiza todos os arquivos /a/myProject/.project/e copia, preservando o caminho, todos os arquivos contidos nele.

Alex Avlonitis
fonte
1
.project é um arquivo, não dir!
ddbug
1

Além disso --parents, também é necessário adicionar a -ropção para evitar omitir a cópia da maioria dos diretórios internos

$ cp --parents test/1/.moo test2/
cp: omitting directory ‘test/1/.moo’

Portanto, o comando que funciona para mim é

$ cp --parents -r test/1/.moo test2/
cml.co
fonte
0

Esteja ciente de que parece haver um erro no cp --parents. Quando eu usei --parentsjunto --preserve=all, os atributos de data e hora de ALGUNS diretórios de destino NÃO foram preservados.

O seguinte link parece confirmar que este é um erro: bug # 8767: cp: --preserve = all não funciona para os pais quando --parent é usado .

Portanto, parece que você não pode confiar nos atributos que estão sendo preservados ao usar --parentsjunto com, como --preserve=allou -p.

chandra67
fonte
-3

Eu usei --parentscom o cpcomando e trabalhei perfeitamente comigo. para mais detalhes, use sempre o manual. Obrigado.

sys0dm1n
fonte
3
Não adiciona nada às outras 5 respostas.
Deer Hunter
Os respondentes, por favor, note que .project no Eclipse é um arquivo, não um diretório. Então, por exemplo, mkdir -pa / .project não faz sentido.
ddbug