¿Cómo se copia un directorio y su contenido a una nueva ubicación con un nuevo nombre de directorio?

53

Soy nuevo en la línea de comandos de Linux y estoy tratando de familiarizarme con el comando de copia en este momento.

¿Alguien puede decirme si es posible copiar un directorio con sus subdirectorios y archivos asociados a un nuevo directorio con un nuevo nombre, por ejemplo, directorio_respaldo?

Gracias por cualquier ayuda por adelantado

Edmuntu
fuente

Respuestas:

71

Utiliza -r(copia recursivamente) y especifica el nuevo nombre

cp -r /path/to/directory /path/to/location/new-name

reemplace con las rutas reales ... por ejemplo para copiar stuffdesde mi directorio de inicio a un directorio existentebackup y nombrar el nuevo directorio stuff-backup(si este directorio ya existe, tenga en cuenta que stuffse copiará en él, no lo sobrescribirá).

cp -r ~/stuff ~/backup/stuff-backup

~es un acceso directo para su directorio personal /home/$USERo /home/zannaen mi caso. Puede omitirlo si el directorio de trabajo actual es su directorio de inicio; puede ver esto desde su solicitud

zanna@monster:~$
              ^--the ~ here is where I am - home!

Puede agregar el -vindicador detallado para hacer un cpinforme de cada copia que se realiza ...

$ cp -vr stuff backup/stuff-backup
'stuff/thing1' -> 'backup/stuff-backup/thing1'
'stuff/thing2' -> 'backup/stuff-backup/thing2
...
Zanna
fuente
Lo siento, Zanna. Pondré en práctica tus consejos y veré cómo me va. Como la idea de la bandera detallada. suponga que esto también funcionará como un informe mientras se está trabajando otro comando. Saludos.
Edmuntu
@Edmuntu, ¿perdón por qué? Sí, muchos comandos tienen una bandera -vo --verbose:) :)
Zanna
perdón por el breve "gracias" inicial ... presione la tecla de retorno por error.
Edmuntu
10

El comando que necesita es simplemente el cpque significa "copiar".

Puede usarlo, por ejemplo, con una de estas sintaxis:

cp SOURCEFILE TARGETFILE
cp SOURCEFILE TARGETDIRECTORY

La primera variante le permite especificar un nuevo nombre de archivo para el archivo de destino, mientras que la segunda variante crea una copia con el mismo nombre en el directorio de destino. Por supuesto, primero debe sustituir los marcadores de posición en letras mayúsculas con rutas válidas.

Sin embargo, cppor defecto opera solo en archivos, no en directorios. Para que copie un directorio completo con todo su contenido de forma recursiva, debe agregar la -ropción:

cp -r SOURCEDIRECTORY TARGETDIRECTORY

Puede obtener más información sobre el cpcomando escribiendo man cpen su terminal.

Byte Commander
fuente
No estoy acostumbrado a esta sección de comentarios Byte Commander ... sigue presionando volver a la línea de cambio, pero publica en su lugar. Esquema muy claro en su respuesta. Esperamos poder ordenar esos directorios ahora que he recibido buenas instrucciones sobre el uso correcto de las herramientas disponibles. Excelente.
Edmuntu
@Edmuntu En el futuro, use MAYÚS + ENTRAR mientras comenta para ir por una línea.
TheOdd
@OwenHines Solo que los comentarios eliminan cualquier salto de línea y espacios en blanco adicionales y tenerlos en el editor no cambia nada en el resultado.
Byte Commander
@ByteCommander Oh, claro, no importa. Bueno, ahora lo sabe.
TheOdd
6

Como alternativa al comando cp generalmente útil, puede usar rsync que tiene el beneficio adicional de replicar los permisos / marcas de tiempo de la estructura de directorio original:

rsync -av dir/ newdir

-a archivo -v detallado

tenga en cuenta la barra diagonal después del directorio de origen.

slowko
fuente
5

Me resulta más fácil cambiar al directorio desde el que estoy copiando. Para este ejemplo, cambie a un directorio que todos hayan llamado /boot. Cualquiera puede copiar y pegar los siguientes comandos en su Terminal.

cd /boot
sudo mkdir /boot_backup
sudo cp -r . /boot_backup
du /boot_backup -h

752K    /boot_backup/extlinux/themes/debian-wheezy
756K    /boot_backup/extlinux/themes
832K    /boot_backup/extlinux
2.5M    /boot_backup/grub/i386-pc
20K     /boot_backup/grub/locale
2.3M    /boot_backup/grub/fonts
7.2M    /boot_backup/grub
565M    /boot_backup

Para el cpcomando, el directorio actual se identifica como .el /bootdirectorio al que cambiamos. La -ropción hace que sea recursivo incluir todos los subdirectorios.

Para asegurarse de que funcionó, ejecute duuna lista de todos los subdirectorios y el tamaño total de los archivos en el nuevo directorio /boot_backupen este caso.

Después de terminar este recorrido, use: sudo rm -r /boot_backuppara eliminar el nuevo directorio y sus subdirectorios.

WinEunuuchs2Unix
fuente
1
Si bien esto explica cómo copiar todos los archivos de su directorio actual a otro directorio, no responde completamente la pregunta de los OP sobre cómo copiar un directorio (y su contenido) a un directorio de nombre diferente. Hay comandos más cortos (como cp -r) que se encargarán de crear un nuevo directorio y copiar todos los archivos en él
BlueCacti
1
Explica cómo copiar y dirigir y su contenido; la diferencia es que primero cambia al directorio de origen como un hábito de precaución. cp -rcomo recomienda ya está en la tercera línea de comando. El tutorial se basa en el hecho de que todos tienen un /bootdirectorio y pueden probarlo en su propia máquina. Si hubiera utilizado cp -r /home/GroundZero/Documents /home/GroundZero/Documents_backuplectores no podría copiar y pegar en su terminal, tendrían cambios GroundZerocreando más trabajo y posibilidades de error. Espero que aprecies el KISS de esta respuesta con un tutorial incrustado.
WinEunuuchs2Unix
1
@GroundZero haciendo un cd ~/Documents/SomeObsucreFolder/2016/Nov/para establecer el directorio actual como directorio fuente cambiará la solicitud de Terminal para asegurarse de que está escrito correctamente y luego usarlo cp -r .ya que la fuente elimina volver a escribir el directorio fuente. Es simplemente lo que considero un buen hábito. Además, una vez que se cambia al directorio de origen, es fácil de hacer ls FIleName1, ls FileName2etc. para asegurar que los archivos que desea respaldar estén allí sin tener que repetir el nombre del directorio de origen para el lscomando.
WinEunuuchs2Unix
5

Puede usar el siguiente comando para copiar el directorio de un lugar a otro subdirectorio.

cp -Rvp /home/edmuntu/data /home/edmuntu/mydata/

Explicación del comando:

  • -R = copiar directorios de forma recursiva
  • v = explicar lo que se está haciendo
  • p = Le ayudará a preservar su permiso y propiedad con marcas de tiempo
Rakesh C
fuente
Gracias @Rakesh Chauhan. "Preservar su permiso y propiedad con marcas de tiempo" ??? Wow ... ¡Necesito llegar! Otro aspecto más de los comandos de línea para explorar. Gracias por su respuesta.
Edmuntu
4

cpes el comando que realiza la función que estás buscando. Es sinónimo de copia y hace exactamente eso. El comando que funcionaría para usted en esta situación es

cp -R source/ destination/

Esto copiaría la source/carpeta y todos sus subdirectorios a destination/.

Si destination/no existe, se creará.

La -Rbandera significa recursivo, que le indica cpque copie todos los subdirectorios.

TheOdd
fuente
Gracias @ Owen Hines. Parece que este es definitivamente el comando para mi tarea
Cheers
1
@Edmuntu Me alegra poder ayudarlo, si encuentra la solución a su problema, ¿puede marcar la respuesta que funcionó para usted como la correcta haciendo clic en la marca de verificación que se encuentra debajo? Esto ayudará a alertar a otros que ven la página de la pregunta que se está resolviendo.
TheOdd
1

En general, desea mantener los permisos de archivo iguales al hacer una copia, no un nuevo conjunto de permisos de creación predeterminados. Eso significa usar -a flag para cp.

cp -a file filenew
Robi
fuente