Wie kopiere ich den Verzeichnispfad für die Dateibewahrung unter Linux?

88

Ich habe Eclipse-Projekte und ".project" -Datei in ihnen, die Verzeichnisstruktur sieht aus wie " myProject/.project". Ich möchte diese '.project'-Dateien in ein anderes Verzeichnis kopieren, aber ich möchte, dass der Name des umschließenden Verzeichnisses erhalten bleibt.

Nehmen wir an, ich habe ' a/myProject/.project', ich möchte ' myProject/.project' nach ' b' kopieren , also ist es ' b/myProject/.project', aber ' b/myProject' existiert nicht. Wenn ich ein probiere:

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

Es kopiert nur die '.project'-Datei ohne das' myProject'-Verzeichnis. Bitte beraten.

Dhblah
quelle

Antworten:

153

Der Schalter, den Sie benötigen, ist --parentszB:

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
quelle
7

Verwenden Sie tarmit etwas wie:

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

(Nicht getestet. Probieren Sie es zuerst aus oder versuchen Sie es in einem Modellszenario.)

Lorenzog
quelle
funktioniert überraschend gut! Auf dem Mac: mkdir b; tar -c -f new.tar $ (cat myP); teer-x-f new.tar -C b /; #myP ist eine Textdatei mit einer Liste der zu kopierenden Pfade zu Dateien
alexey
4

Zuerst verwenden mkdir -p, um den Zielordner mit der rekursiven Erstellung eines übergeordneten Pfads zu erstellen. Kopieren Sie dann den Inhalt in den Zielordner:

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

Siehe man cpfür weitere Informationen.

Maxfer
quelle
Das scheint nicht zu helfen. Es kopiert nur '.project' selbst in b, aber es kopiert nicht 'myProject'.
Dhblah
3

Ich benutze cpio in kombination mit find. Erklärung hier .

Beispiel für Ihren Anwendungsfall:

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

Dieser Befehl findet alle Dateien in /a/myProject/.project/und kopiert alle darin enthaltenen Dateien unter Beibehaltung des Pfads.

Alex Avlonitis
quelle
1
.project ist eine Datei, nicht dir!
DDBUG
1

Zusätzlich dazu --parentsmuss eine -rOption hinzugefügt werden, um zu vermeiden, dass die Kopie des innersten Verzeichnisses ausgelassen wird

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

Der Befehl, der für mich funktioniert, ist also

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

Bitte beachten Sie, dass es einen Bug in zu geben scheint cp --parents. Wenn ich --parentszusammen mit verwendete --preserve=all, wurden die Datums- und Zeitattribute einiger Zielverzeichnisse NICHT beibehalten.

Der folgende Link scheint zu bestätigen, dass dies ein Fehler ist: Fehler # 8767: cp: --preserve = alles funktioniert nicht für die Eltern, wenn --parent verwendet wird .

Es sieht also so aus, als ob Sie sich nicht darauf verlassen können, dass Attribute beibehalten werden, wenn Sie --parentszusammen mit wie --preserve=alloder verwenden -p.

chandra67
quelle
-3

Ich habe mich --parentsan den cpBefehl gehalten und perfekt mit mir gearbeitet. Für weitere Details benutzen Sie immer das Handbuch. Danke.

sys0dm1n
quelle
3
Fügt den anderen 5 Antworten nichts hinzu.
Deer Hunter
Antwortende beachten bitte, dass .project in Eclipse eine Datei und kein Verzeichnis ist. So macht zB mkdir -pa / .project keinen Sinn.
DDBUG