Vraag Hoe kopieer je het bestandspad van de directory in Linux?


Ik heb Eclipse-projecten en ".project" -bestand erin, de directory-structuur ziet eruit als:myProject/.project'. Ik wil deze '.project'-bestanden naar een andere map kopiëren, maar ik wil dat de naam van de ingesloten map wordt bewaard.

Laten we zeggen dat ik 'a/myProject/.project', Ik wil kopiëren'myProject/.project' naar 'b', zo is het'b/myProject/.project', maar 'b/myProject'bestaat niet. Wanneer ik probeer in een:

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

het kopieert alleen het '.project'-bestand zelf, zonder de directory' myProject '. Adviseer, alstublieft.


71
2017-09-14 07:52


oorsprong




antwoorden:


De schakelaar die je nodig hebt is --parents, bijv .:

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





Je kan ook gebruiken rsync -R, dat werkt op OSX waar cp --parents is niet beschikbaar.

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


13
2017-12-24 05:22





Gebruik tar met zoiets als:

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

(Niet getest. Geef het eerst een dry run of probeer een mockup-scenario.)


6
2017-09-14 08:39



werkt verrassend goed! Op mac: mkdir b; tar -c -f new.tar $ (cat myP); tar -x -f new.tar -C b /; #myP is een tekstbestand met een lijst met paden naar bestanden die moeten worden gekopieerd - alexey


Eerste gebruik mkdir -p om de bestemmingsmap aan te maken met recursieve creatie van het ouderpad. Kopieer de inhoud vervolgens naar de doelmap:

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

Zien man cp voor meer informatie.


3
2017-09-14 08:06



Dit lijkt niet te helpen. Het kopieert '.project' alleen naar b, maar het kopieert 'myProject' niet. - dhblah


Ik gebruik cpio in combinatie met find. Uitleg hier.

Voorbeeld van uw use case:

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

Met deze opdracht worden alle bestanden gevonden /a/myProject/.project/ en kopieert, met behoud van het pad, alle bestanden die zich hierin bevinden.


2
2018-03-17 09:40



.project is een bestand, niet dir! - ddbug


Aanvullend op --parents het is ook verplicht om toe te voegen -r optie om te voorkomen dat de kopie van de meeste interne map wordt weggelaten

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

Dus het commando dat voor mij werkt is

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

1
2017-07-29 19:59





Houd er rekening mee dat er een bug in lijkt te zitten cp --parents. Toen ik gebruikte --parents samen met --preserve=all, de datum- en tijdkenmerken van SOME bestemmingsmappen werden NIET bewaard.

De volgende link lijkt te bevestigen dat dit een bug is: bug # 8767: cp: --preserve = alles werkt niet voor de ouders wanneer --ouder is gebruikt.

Dus het lijkt erop dat u niet kunt vertrouwen op attributen die tijdens het gebruik worden bewaard --parents samen met dergelijke --preserve=all of -p.


0
2017-10-15 11:38