Frage Wie kopiere ich den Dateierhaltenden Verzeichnispfad unter Linux?


Ich habe Eclipse-Projekte und eine ".project" -Datei darin, die Verzeichnisstruktur sieht folgendermaßen aus:myProject/.project". Ich möchte diese ".project" -Dateien in ein anderes Verzeichnis kopieren, aber ich möchte, dass der einschließende Verzeichnisname beibehalten wird.

Sagen wir, ich habe 'a/myProject/.project', Ich möchte kopieren'myProject/.project"zu"b"So ist es"b/myProject/.project', aber 'b/myProject"existiert nicht. Wenn ich versuche in:

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

Es kopiert nur die Datei ".project" selbst, ohne das Verzeichnis "myProject". Bitte beraten.


71
2017-09-14 07:52


Ursprung




Antworten:


Der Schalter, den Sie brauchen, ist --parents, z.B.:

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

128
2017-09-14 08:34





Sie können auch verwenden rsync -R, die auf OSX funktioniert, wo cp --parents ist nicht verfügbar.

https://stackoverflow.com/a/13855290/598940


13
2017-12-24 05:22





Benutzen tar mit etwas wie:

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

(Nicht getestet. Geben Sie zuerst einen Trockenlauf oder versuchen Sie es in einem Mockup-Szenario.)


6
2017-09-14 08:39



funktioniert überraschend gut! Auf dem Mac: mkdir b; tar -c -f neu.tar $ (cat myP); tar -x -f neu.tar -C b /; #myP ist eine Textdatei mit einer Liste von Pfaden zu Dateien, die kopiert werden sollen - alexey


Erste Benutzung mkdir -p Erstellen des Zielordners mit rekursiven übergeordneten Pfaderstellung. Kopieren Sie dann den Inhalt in den Zielordner:

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

4
2018-06-02 22:59





cp -P a/myProject/.project b

Sehen man cp für mehr Informationen.


3
2017-09-14 08:06



Das scheint nicht zu helfen. Es kopiert nur '.project' selbst in b, kopiert aber 'myProject' nicht. - dhblah


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, während der Pfad beibehalten wird, alle darin enthaltenen Dateien.


2
2018-03-17 09:40



.project ist eine Datei, nicht dir! - ddbug


Zusätzlich zu --parents Es ist auch erforderlich, hinzuzufügen -r Option, um die Kopie des meisten inneren Verzeichnisses zu vermeiden

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

Also der Befehl, der für mich funktioniert

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

1
2017-07-29 19:59





Bitte beachten Sie, dass anscheinend ein Fehler vorliegt cp --parents. Als ich gebraucht habe --parents zusammen mit --preserve=all, die Datums- und Uhrzeitattribute von SOME Zielverzeichnisse wurden 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 ist gebraucht.

Es sieht also so aus, als könnten Sie sich nicht darauf verlassen, dass Attribute bei der Verwendung erhalten bleiben --parents zusammen mit solchen wie --preserve=all oder -p.


0
2017-10-15 11:38





ich benutzte --parents mit dem cp Befehl und arbeitete perfekt mit mir. Für weitere Details benutzen Sie immer das Handbuch. Vielen Dank.


-3
2018-05-15 07:44



Fügt den anderen 5 Antworten nichts hinzu. - Deer Hunter
Beantworter Bitte beachten Sie, dass .Project in Eclipse eine Datei, kein Verzeichnis ist. So z.B. mkdir -p a / .project macht keinen Sinn. - ddbug