Come copiare il file preservando il percorso della directory in Linux?


88

Ho progetti Eclipse e file ".project", la struttura delle directory sembra ' myProject/.project'. Voglio copiare questi file '.project' in un'altra directory, ma voglio preservare il nome della directory allegata.

Diciamo che ho ' a/myProject/.project', voglio copiare ' myProject/.project' in ' b', quindi sia ' b/myProject/.project', ma ' b/myProject' non esiste. Quando provo in un:

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

copia solo il file '.project' stesso, senza la directory 'myProject'. Si prega di avvisare.

Risposte:


153

L'interruttore di cui hai bisogno è --parents, ad esempio:

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


7

Utilizzare tarcon qualcosa del tipo:

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

(Non testato. Provalo prima a secco o prova in uno scenario di simulazione).


funziona sorprendentemente bene! Su mac: mkdir b; tar -c -f new.tar $ (cat myP); tar -x -f new.tar -C b /; #myP è un file di testo con un elenco di percorsi per i file da copiare
alexey,

4

Primo utilizzo mkdir -pper creare la cartella di destinazione con la creazione di percorsi parent ricorsivi. Quindi copia il contenuto nella cartella di destinazione:

mkdir -p b/myProject/.project
cp -r a/myProject/.project/file b/myProject/.project

3
cp -P a/myProject/.project b

Vedi man cpper maggiori informazioni.


Questo non sembra aiutare. Copia solo '.project' stesso in b, ma non copia 'myProject'.
dhblah,

3

Uso cpio in combinazione con find. Spiegazione qui .

Esempio per il tuo caso d'uso:

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

Questo comando trova tutti i file /a/myProject/.project/e copia, preservando il percorso, tutti i file contenuti all'interno.


1
.project è un file, non dir!
ddbug,

1

Inoltre --parents, è necessario anche aggiungere -run'opzione per evitare di omettere la copia della maggior parte delle directory interne

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

Quindi il comando che funziona per me è

$ cp --parents -r test/1/.moo test2/

0

Si prega di essere consapevoli del fatto che sembra esserci un bug in cp --parents. Quando l'ho usato --parentsinsieme --preserve=all, gli attributi di data e ora di ALCUNE directory di destinazione NON sono stati conservati.

Il seguente link sembra confermare che si tratta di un bug: bug # 8767: cp: --preserve = tutto non funziona per i genitori quando --parent viene utilizzato .

Quindi sembra che non si possa fare affidamento sugli attributi conservati quando si utilizza --parentsinsieme a come --preserve=allo -p.


-3

Ho usato --parentsil cpcomando e ho lavorato perfettamente con me. per maggiori dettagli usa sempre il manuale. Grazie.


3
Non aggiunge nulla alle altre 5 risposte.
Deer Hunter,

I rispondenti sono pregati di notare che .project in Eclipse è un file, non una directory. Quindi ad esempio mkdir -pa / .project non ha senso.
ddbug,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.