it-swarm.dev

Copie el contenido del directorio usando el comando 'cp'

¿Cómo copiar todos los contenidos de un directorio en otro?

Por ejemplo:

$ cd /home/newuser
$ cp -a /backup/olduser/* .

El problema con lo anterior es que el patrón global '*' coincide con los directorios ocultos '.' y '...' y terminas con un directorio 'olduser' dentro de 'newuser', así como los contenidos.

También podrías hacer algo como esto:

$ rmdir /home/newuser
$ cp -a /backup/olduser /home/newuser

Pero, ¿y si newuser ya contiene algunos archivos y directorios predeterminados?

¿Cuál es la forma más sencilla, correcta, fácil de recordar y no desordenada de mover el contenido de un directorio a otro con solo el comando básico 'cp' y el shell?

33
nomount

Tratar:

cp -ra /backup/olduser/. /home/newuser
30
nagul

Dos directorios a y b.

Ambos tienen archivos en.

Está en un directorio que contiene a y b.

cp -r ./a b

-r = recursivamente.

23
Rich Bradshaw

También recuerde que, por defecto, cp copie el primer directorio en el segundo directorio si existe el segundo. Por ejemplo, cp -a a b copiará un INTO b si b existe, es decir, creará un en b.

Si no es lo que desea y desea copiar el contenido de a en b (por ejemplo, al copiar todo un sistema de archivos en un punto de montaje) use:

cp -a a/. b

como en la respuesta anterior.

Tenga en cuenta que -a incluye -r por lo que -ar es redundante.

18
Nicolas Bonnefon

A menos que haya reconfigurado seriamente su Shell, el patrón de globo '*' no coincide con ''. o '..', como puede verificar usando solo echo *. Lo que hace en su lugar es omitir los archivos cuyo nombre comience con un '.', Por lo que su enfoque perderá todos los archivos ocultos. Puede modificar parte de este comportamiento con las opciones de Shell, por ejemplo, la opción dotglob en bash, pero entonces no será la opción robusta y portátil que está buscando.

Si necesita hacer esto más de una o dos veces, le recomiendo que busque en rsync o unison (según las necesidades específicas) con especificaciones de origen y destino cuidadosamente diseñadas.

Otra alternativa es colocar el directorio de origen en un archivo comprimido y descomprimirlo sobre el directorio de destino existente.

6
Peter Eisentraut

Esto copiará tanto los archivos normales como los ocultos, mientras excluye el directorio principal (..):

cd /directory/to/copy
cp -r * .[^.]* /destination/directory

Si no excluye el directorio principal, también obtendrá todos los contenidos de .. en su directorio de destino.

2
mch

Esto funciona para copiar todos los archivos y directorios, excepto los directorios ocultos recursivamente desde el directorio actual hasta donde sea:

cp -rf * ^.* 
0
Seeeve

Para copiar archivos que comienzan con un punto, simplemente haga cp. * Target /

Así que lo más fácil es simplemente hacer el comando cp dos veces.

Como Peter Eisentraut dice que las reglas normales de globbing no incluyen ... y. (hm, ¿cómo terminar esta frase?;)

Simplemente use -r para hacerlo recursivo y -i para hacer que cp pregunte si realmente desea sobrescribir un archivo.

cp -ri /backup/olduser/* /newuser/
cp -ri /backup/olduser/.* /newuser/
0
gaqzi