sábado, 8 de enero de 2011

Backup en Linux desde consola con el comando cp

Estuve analizando en Linux el asunto del backup y encontré este potente comando: cp
En resumen comparando con el xcopy de Windows sería lo siguiente:

Win / Linux /Significado

xcopy = cp (Copia )
/d = -u (Update)
/e = -R ( Recursive)
/y = (default con "cp". En Linux no hace pide confirmación para cada acción)
(sin /y) = -i (Interactivo, pide confirmar cada acción)

Ejemplo en Linux (para escribir en la consola: Aplicaciones -> Accesorios -> Terminal) (El símbolo "$" no se escribe):

$cp -u -R /home/jdiaz/origen /media/disk/Varios/destino

(Nótese que en Linux las opciones van antes que los paths)

Para hacer un script:

#! /bin/sh
cp -u -R /home/jdiaz/origen /media/disk/Varios/destino


Lo guardás en un archivo con extensión .sh, le das permisos de ejecución y listo.

Si lo Gurdás en alguna carpeta del $PATH se puede invocar desde la consola o con la pantalla de Ejecutar (Alt+F2). Para saber cuáles son los directorios del $PATH podés escribir en una terminal lo siguiente:

$ cat /etc/environment


Tarea para el hogar:

Lo combinás con una sentencia "cron" ...y te olvidás!!!

Por si quieren profundizar incluyo las aclaraciones y el manual de xcopy para Windows que me pasó mi amigo LDJ, que es todo lo que sigue:



xcopy "C:\Documents and Settings\LDJ\Mis documentos\Origen\*" "\\Server\BackUp\Destino\" /v /d /e /y

pause

Esto lo podés guardar con extensión .bat y lo ejecutás cuando querés o lo asociás a las tareas programadas de Windows.

HELP DEL XCOPY
XcopyCopia archivos y directorios, incluidos subdirectorios.

Sintaxis
xcopy Origen [Destino] [/w] [/p] [/c] [/v] [/q] [/f] [/l] [/g] [/d[:mm-dd-aaaa]] [/u] [/i] [/s [/e]] [/t] [/k] [/r] [/h] [{/a|/m}] [/n] [/o] [/x] [/exclude:archivo1[+[archivo2]][+[archivo3]] [{/y|/-y}] [/z]

Parámetros
Origen
Obligatorio. Especifica la ubicación y los nombres de los archivos que desea copiar. Este parámetro debe incluir una unidad o una ruta de acceso.
Destino
Especifica el destino de los archivos que se van a copiar. Este parámetro puede incluir una letra de unidad y dos puntos, un nombre de directorio, un nombre de archivo o una combinación de éstos.
/w
Muestra el siguiente mensaje y espera la respuesta para comenzar a copiar archivos:
Presione cualquier tecla para empezar a copiar los archivos

/p
Pide confirmación antes de crear cada archivo de destino.
/c
Omite los errores.
/v
Comprueba cada archivo al escribirlo en el archivo de destino para asegurarse de que los archivos de destino y de origen son idénticos.
/q
Suspende la presentación de mensajes de xcopy.
/f
Muestra los nombres de los archivos de origen y de destino mientras se realiza la copia.
/l
Muestra una lista con los archivos que se van a copiar.
/g
Crea archivos de destino descifrados.
/d[:mm-dd-aaaa]
Copia sólo los archivos de origen que se hayan cambiado en o después de la fecha especificada. Si no se incluye un valor de mm-dd-aaaa, xcopy copia todos los archivos de Origen que sean más recientes que los archivos de Destino existentes. Esta opción de línea de comandos permite actualizar los archivos que se hayan cambiado.
/u
Copia sólo los archivos de Origen que existan en Destino.
/i
Si Origen es un directorio o contiene comodines y Destino no existe, xcopy supone que destino especifica un nombre de directorio y crea un nuevo directorio. A continuación, xcopy copia en el nuevo directorio todos los archivos especificados. De manera predeterminada, xcopy le pedirá que indique si Destino es un archivo o un directorio.
/s
Copia directorios y subdirectorios, a menos que estén vacíos. Si omite /s, xcopy se aplica a un único directorio.
/e
Copia todos los subdirectorios, incluso si están vacíos. Utilice /e con las opciones de línea de comandos /s y /t.
/t
Sólo copia la estructura (árbol) de subdirectorios, no los archivos. Para copiar directorios vacíos, debe incluir la opción de línea de comandos /e.
/k
Copia archivos y conserva el atributo de sólo lectura en los archivos de destino, si está presente en los archivos de origen. De manera predeterminada, xcopy quita el atributo de sólo lectura.
/r
Copia archivos de sólo lectura.
/h
Copia archivos con atributos de sistema y oculto. De manera predeterminada, xcopy no copia los archivos del sistema ni los ocultos.
/a
Sólo copia los archivos de origen a los que se haya asignado el atributo de modificado. /a no cambia el atributo de modificado de los archivos de origen. Para obtener información acerca de cómo establecer el atributo de modificado mediante attrib, consulte los Temas relacionados.
/m
Copia los archivos de origen a los que se haya asignado el atributo de modificado. A diferencia del modificador /a, el modificador /m quita el atributo de modificado de los archivos especificados en el origen. Para obtener información acerca de cómo establecer el atributo de modificado mediante attrib, consulte los Temas relacionados.
/n
Crea copias usando los nombres cortos de archivos o directorios de NTFS. /n es necesario cuando copie archivos o directorios de un volumen NTFS a un volumen FAT o cuando la convención de nomenclatura del sistema de archivos FAT (8,3) sea necesaria en el sistema de archivos de destino. El sistema de archivos de destino puede ser FAT o NTFS.
/o
Copia la información de propiedad de archivo y de la lista de control de acceso discrecional (DACL).
/x
Copia información de la configuración de auditoría de archivos y de la lista de control de acceso al sistema (SACL) (implica el uso de /o).
/exclude:nombreDeArchivo1[+[nombreDeArchivo2]][+[nombreDeArchivo3]]
Especifica una lista de archivos que contienen cadenas.
/y
Suprime las preguntas que le piden que confirme que desea sobrescribir un archivo de destino existente.
/-y
Le pide que confirme que desea sobrescribir un archivo de destino existente.
/z
Copia a través de una red en modo reiniciable.
/?
Muestra la Ayuda en el símbolo del sistema.
Observaciones
Usar /v
Windows XP no utiliza este comando. Solamente se acepta por compatibilidad con los archivos de MS-DOS.

Usar /exclude
Muestra cada cadena en una línea distinta en cada archivo. Si alguna de las cadenas mostradas coincide con cualquier parte de la ruta de acceso absoluta del archivo que se va a copiar, ese archivo queda excluido del proceso de copia. Por ejemplo, si especifica la cadena "\Obj\", se excluirán todos los archivos del directorio Obj. Si especifica la cadena ".obj", se excluirán todos los archivos con la extensión .obj.

Usar /z
Si la conexión se interrumpe durante la fase de copia (por ejemplo, si se desconecta el servidor que sirve la conexión), la copia se reanudará una vez que la conexión se haya vuelto a establecer. /z también presenta el porcentaje de la operación de copia que se ha completado en cada archivo.

Usar /y en la variable de entorno COPYCMD Puede utilizar /y en la variable de entorno COPYCMD Este comando puede suplantarse mediante el modificador /-y en la línea de comandos. De manera predeterminada, se le preguntará si desea sobrescribir, a menos que ejecute copy desde un archivo de comandos por lotes.

Copiar archivos cifrados
La copia de archivos cifrados en un volumen que no admita EFS generará un error. Descifre primero los archivos o cópielos en un volumen que admita EFS.

Anexar archivos
Para anexar archivos, especifique un único archivo de destino, pero varios archivos de origen (mediante caracteres comodín o el formato archivo1+archivo2+archivo3).

Valor predeterminado para Destino
Si omite Destino, el comando xcopy copia los archivos al directorio actual.

Especificar si Destino es un archivo o un directorio Si Destino no contiene un directorio existente y no termina con una barra diagonal inversa (\), aparece el siguiente mensaje:

¿El parámetro de destino especifica un archivo o un directorio como destino (F = archivo, D = directorio)?

Presione F si desea que los archivos se copien en un archivo. Presione D si desea que los archivos se copien en un directorio.

Este mensaje se puede suprimir si utiliza la opción de línea de comandos /i, que hará que xcopy suponga que el destino es un directorio si el origen son varios archivos o un directorio.

Usar el comando xcopy para establecer el atributo de modificado de los archivos de Destino El comando xcopy crea archivos con el atributo de modificado, aunque este atributo no se haya asignado a los archivos de origen. Para obtener más información acerca de los atributos de modificado y del comando attrib, consulte Temas relacionados.

Diferencias entre xcopy y diskcopy
Si tiene un disco que contiene archivos que se encuentren en subdirectorios y desea copiarlos a un disco que tenga un formato diferente, debe utilizar el comando xcopy en lugar de diskcopy. Como el comando diskcopy copia los discos pista a pista, requiere que tanto el disco de origen como el de destino tengan el mismo formato. El comando xcopy no tiene este requisito. Utilice xcopy a menos que necesite una copia completa de la imagen del disco.

Códigos de salida de xcopy
Para procesar los códigos de salida que devuelve xcopy, utilice el parámetro errorlevel en la línea de comandos if de un programa por lotes. Si desea ver un ejemplo de un programa por lotes que procese los códigos de salida con if, consulte los Temas relacionados. En la siguiente tabla se enumera cada código de salida y una descripción.

Código de salida Descripción
0 Archivos copiados sin error.
1 No se encontraron archivos para copiar.
2 El usuario presionó CTRL+C para finalizar xcopy.
4 Error de inicialización. No hay suficiente memoria o espacio en el disco, se escribió un nombre de unidad no válido o se utilizó una sintaxis incorrecta en la línea de comandos.
5 Error de escritura de disco.

Ejemplos
Para copiar todos los archivos y subdirectorios (incluidos los subdirectorios vacíos) de la unidad A a la unidad B, escriba:

xcopy a: b: /s /e

Para incluir los archivos del sistema y los ocultos en el ejemplo anterior, agregue la opción de línea de comandos /h del modo siguiente:

xcopy a: b: /s /e /h

Para actualizar archivos del directorio \Informes con los archivos del directorio \Datos que se hayan cambiado desde el 29 de diciembre de 1993, escriba:

xcopy \rawdata \reports /d:12-29-1993

Para actualizar todos los archivos que existan en el directorio \Informes del ejemplo anterior, independientemente de la fecha, escriba:

xcopy \rawdata \reports /u

Para obtener una lista de los archivos que se van a copiar en el ejemplo anterior (sin copiarlos realmente), escriba:

xcopy \rawdata \reports /d:12-29-1993 /l > xcopy.out

El archivo Xcopy.out contiene una lista de todos los archivos que se van a copiar.

Para copiar el directorio \Cliente y todos los subdirectorios al directorio \\Pública\Dirección de la unidad H de red:, conservar el atributo de sólo lectura y que se le avise cuando se cree un nuevo archivo en H:, escriba:

xcopy \customer h:\public\address /s /e /k /p

Para emitir el comando anterior, asegurarse de que xcopy crea el directorio \Dirección, en caso de que no exista, y suprima el mensaje que aparece cuando se crea un nuevo directorio, agregue la opción de línea de comandos /i de la forma siguiente:

xcopy \customer h:\public\address /s /e /k /p /i

Puede crear un programa por lotes para realizar operaciones de xcopy y usar el comando if de procesos por lotes para procesar los códigos de salida si se produce un error. Por ejemplo, el siguiente programa por lotes utiliza parámetros reemplazables para los parámetros origen y destino de xcopy:

@echo off
rem Copias.bat transfiere todos los archivos de todos los subdirectorios rem de la unidad o directorio de origen (%1) a la unidad o directorio de destino

rem (%2)

xcopy %1 %2 /s /e

if errorlevel 4 goto pocaMemoria
if errorlevel 2 goto cancelar
if errorlevel 0 goto salir

:pocaMemoria
echo Memoria insuficiente para copiar archivos, echo unidad no válida o sintaxis de la línea de comandos incorrecta.
goto salir

:cancelar
echo Presionó CTRL+C para finalizar la operación de copia.
goto salir

:salir

Para utilizar este programa por lotes a fin de copiar en la unidad B todos los archivos del directorio C:\Codprog y de sus subdirectorios, escriba:

copias c:\codprog b:

El intérprete de comandos reemplaza C:\codprog por %1 y B: por %2, a continuación ejecuta xcopy con las opciones de línea de comandos /e y /s. Si xcopy encuentra un error, el programa por lotes leerá el código de salida y pasará a la etiqueta indicada en la instrucción IF ERRORLEVEL correspondiente. A continuación, mostrará el mensaje adecuado y saldrá del programa por lotes.

Leyenda de formato
Formato Significado
Cursiva Información que debe suministrar el usuario Negrita Elementos que el usuario debe escribir exactamente como se muestran Puntos suspensivos (...) Parámetro que se puede repetir varias veces en una línea de comandos Entre corchetes ([]) Elementos opcionales Entre llaves ({}); las opciones se separan mediante la barra vertical (|). Ejemplo: {par|impar} Conjunto de opciones de las que el usuario debe elegir sólo una Fuente Courier Código o salida de un programa

(Gracias LDJ)

No hay comentarios:

Publicar un comentario