¿Cómo copiar la ruta del directorio de preservación de archivos en Linux?

88

Tengo proyectos de Eclipse y el archivo ".project" en ellos, la estructura del directorio se ve como ' myProject/.project'. Quiero copiar estos archivos '.project' a otro directorio, pero quiero que se conserve el nombre del directorio adjunto.

Digamos que tengo ' a/myProject/.project', quiero copiar ' myProject/.project' a ' b', así será ' b/myProject/.project', pero ' b/myProject' no existe. Cuando lo intento en un:

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

solo copia el archivo '.project', sin el directorio 'myProject'. Por favor avise.

dhblah
fuente

Respuestas:

153

El cambio que necesita es --parents, por ejemplo:

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

Usar tarcon algo como:

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

(No probado. Primero pruébelo en seco o intente en un escenario de maqueta).

lorenzog
fuente
funciona sorprendentemente bien! En mac: mkdir b; tar -c -f new.tar $ (cat myP); tar -x -f new.tar -C b /; #myP es un archivo de texto con una lista de rutas a los archivos que se copiarán
alexey
4

Primero use mkdir -ppara crear la carpeta de destino con la creación recursiva de la ruta principal. Luego copie el contenido a la carpeta de destino:

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

Ver man cppara más información.

Maxfer
fuente
Esto no parece ayudar. Solo copia '.project' en sí mismo en b, pero no copia 'myProject'.
dhblah
3

Yo uso cpio en combinación con find. Explicación aquí .

Ejemplo para su caso de uso:

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

Este comando encuentra todos los archivos /a/myProject/.project/y las copia, mientras conserva la ruta, cualquier archivo que contenga.

Alex Avlonitis
fuente
1
.project es un archivo, no dir!
ddbug
1

Además --parents, también es necesario agregar la -ropción para evitar omitir la copia de la mayoría del directorio interno

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

Entonces el comando que funciona para mí es

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

Tenga en cuenta que parece haber un error en cp --parents. Cuando utilicé --parentsjunto con --preserve=all, los atributos de fecha y hora de ALGUNOS directorios de destino NO se conservaron.

El siguiente enlace parece confirmar que se trata de un error: error # 8767: cp: --preserve = all no funciona para los padres cuando se usa --parent .

Por lo tanto, parece que no puede confiar en los atributos que se conservan al usar --parentsjunto con tales como --preserve=allo -p.

chandra67
fuente
-3

Utilicé --parentsel cpcomando y trabajé perfectamente conmigo. para más detalles siempre use el manual. Gracias.

sys0dm1n
fuente
3
No agrega nada a las otras 5 respuestas.
Deer Hunter
Los contestadores deben tener en cuenta que .project en Eclipse es un archivo, no un directorio. Entonces, por ejemplo, mkdir -pa / .project no tiene sentido.
ddbug