2010-09-04 29 views
150

en bash que necesitan hacer esto:Copia de archivos desde un directorio en un directorio existente

  1. tomar todos los archivos en un directorio

  2. copiarlos en un directorio existente

¿Cómo hago esto? Intenté cp -r t1 t2 (tanto t1 como t2 son directorios existentes, t1 tiene archivos) pero creó un directorio llamado t1 dentro de t2, no quiero eso, necesito los archivos en t1 para ir directamente dentro de t2. ¿Cómo hago esto?

+7

¿Por qué se cerró esto? Es arbitrario si un comando bash es un comando incorporado o externo (por ejemplo, printf existe como ambos en la mayoría de los sistemas), por lo que las preguntas 'cp' pueden verse como preguntas' bash', que es un lenguaje de programación. Nunca he visto una pregunta de Python sobre cerrar la copia de archivo. –

+0

Eche un vistazo a este https://stackoverflow.com/questions/23698183/how-to-force-cp-to-overwrite-directory-instead-of-creating-another-one-inside – theGiallo

Respuesta

18
cp dir1/* dir2 

O si tiene directorios dentro dir1 que te gustaría copiar, así

cp -r dir1/* dir2 
+2

Dependiendo de cómo se encuentre su caparazón configurado, probablemente necesite usar "dir1/* dir1 /.*" en lugar de "dir1/*" si también desea capturar los archivos ocultos. – ssokolow

+2

Copiando 'dir1 /.* 'no es una buena idea, ya que copia dir1/.. (es decir, el elemento primario del directorio que realmente está intentando copiar). También copia dir1 /. lo cual está bien, excepto que ya (la mayoría) se ha copiado, por lo que está haciendo el trabajo dos veces. –

+1

Puede solucionar el problema de los archivos ocultos 'dir1 /.*' haciendo clic en el directorio desde el que desea copiar y luego refiriéndose a él como '.'. Por lo tanto, si desea copiar todos los archivos, incluidos los ocultos, desde un directorio a un directorio existente, puede: 'cd [directorio de origen]', 'cp. [ruta al directorio de destino, sin barra inclinada] '. – RobW

2
cp -R t1/ t2 

La barra final en el directorio de origen cambia la semántica ligeramente, por lo que copia el contenido pero no el directorio en sí. También evita los problemas con los archivos globbing e invisibles que tiene la respuesta de Bertrand (al copiar t1/* se pierden los archivos invisibles y se copian `t1/* t1 /.* 'copias t1 /. Y t1/.., que no desea).

+0

Su solución no funciona, al menos no en mi instalación (Ubuntu 12.10) '' mkdir t1' $ mkdir t2' '$ toque t1/one' ' t1 $ táctil/two' '$ $ táctil t1/.three' 'cp -R $ t1/t2' ' t2 $ ls/'' t1' (lo siento no codeformat en los comentarios, versión legible en http://pastebin.com/yszSxV6G) – zpon

1

Dependiendo de algunos detalles que pueda necesitar para hacer algo como esto:

r=$(pwd) 
case "$TARG" in 
    /*) p=$r;; 
    *) p="";; 
    esac 
cd "$SRC" && cp -r . "$p/$TARG" 
cd "$r" 

... esto básicamente cambios en el directorio SRC y lo copia en el objetivo, a continuación, vuelve de nuevo a donde quiera que empezar.

El alboroto adicional es para manejar objetivos relativos o absolutos.

(Esto no depende de la sutil semántica del comando cp en sí ... acerca de cómo maneja las especificaciones de origen con o sin un seguimiento/... ya que no estoy seguro de que sean estables, portátiles y confiables más allá de solo GNU cp y no sé si continuarán siéndolo en el futuro).

242

Lo que quiere decir:

cp -R t1/. t2/ 

El punto al final dice que para copiar el contenido del directorio actual, no el propio directorio. Este método también incluye archivos y carpetas ocultos.

+2

realmente como esta sintaxis, pero por alguna razón no funciona con 'mv'. ¿Alguien sabe por qué? –

+1

increíble. ¿Dónde está esto documentado? ¿Es POSIX o extensión? –

26

Si desea copiar algo de un directorio en el directorio actual, hacer esto:

cp dir1/* . 

Esto supone que usted no está tratando de copiar los archivos ocultos.

+11

No se encuentran los archivos ocultos. –

Cuestiones relacionadas