En julio pasado, escribí sobre dos grandes usos del comando cp:hacer una copia de seguridad de un archivo y sincronizar una copia secundaria de una carpeta.
Después de haber descubierto estas excelentes utilidades, descubrí que son más detalladas de lo necesario, por lo que creé accesos directos a ellas en mi secuencia de comandos de inicio de shell Bash. Pensé en compartir estos accesos directos en caso de que sean útiles para otros o puedan ofrecer inspiración a los usuarios de Bash que aún no han adoptado alias o funciones de shell.
Actualización de una segunda copia de una carpeta:alias de Bash
El patrón general para actualizar una segunda copia de una carpeta con cp
es:
cp -r -u -v SOURCE-FOLDER DESTINATION-DIRECTORY
donde el -r
significa "descender recursivamente a través de la carpeta visitando todos los archivos", -u
significa "actualizar el objetivo" y -v
significa "modo detallado", SOURCE-FOLDER
es el nombre de la carpeta que contiene la información más actualizada y DESTINATION-DIRECTORY
es el directorio que contiene la copia de SOURCE-FOLDER
eso debe estar sincronizado.
Puedo recordar fácilmente el -r
opción porque la uso a menudo cuando copio carpetas. Probablemente pueda, con un poco más de esfuerzo, recordar -v
, y con aún más esfuerzo, -u
(¿es "actualizar" o "sincronizar" o...).
O simplemente puedo usar la capacidad de alias en Bash para convertir el cp
comando y opciones a algo más memorable, como esto:
alias sync='cp -r -u -v'
Si guardo esto en mi .bash_aliases
archivo en mi directorio de inicio y luego iniciar una nueva sesión de terminal, puedo usar el alias, por ejemplo:
sync Pictures /media/me/4388-E5FE
para sincronizar mi carpeta Imágenes en mi directorio de inicio con la versión de la misma en mi unidad USB.
No estoy seguro si ya tienes una sync
alias definido? Puede enumerar todos sus alias definidos actualmente escribiendo la palabra alias
en el símbolo del sistema en la ventana de su terminal.
¿Te gusta tanto que solo quieres comenzar a usarlo de inmediato? Abra una ventana de terminal y escriba:
echo "alias sync='cp -r -u -v'" >> ~/.bash_aliases
Luego inicie una nueva ventana de terminal y escriba la palabra alias
en el símbolo del sistema. Deberías ver algo como esto:
me@mymachine~$ alias
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias gvm='sdk'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
alias sync='cp -r -u -v'
me@mymachine:~$
Allí puedes ver la sync
alias definido.
Hacer copias de seguridad versionadas:función Bash
El patrón general para hacer una copia de seguridad de un archivo con cp
es:
cp --force --backup=numbered WORKING-FILE BACKED-UP-FILE
donde el -- force
significa "hacer la copia pase lo que pase", el -- backup=numbered
significa "usar un número para indicar la generación de la copia de seguridad", WORKING-FILE
es el archivo actual que deseamos conservar, y BACKED-UP-FILE
es el mismo nombre que el WORKING-FILE
y tendrá la información de generación adjunta.
Además de recordar las opciones al cp
comando, también debemos recordar repetir el WORKING-FILE
nombre por segunda vez. Pero, ¿por qué repetirnos cuando una función Bash puede encargarse de esa sobrecarga por nosotros, así:
Nuevamente, puede guardar esto en su .bash_aliases
archivo en su directorio de inicio.
function backup {
if [ $# -ne 1 ]; then
echo "Usage: $0 filename"
elif [ -f $1 ] ; then
echo "cp --force --backup=numbered $1 $1"
cp --force --backup=numbered $1 $1
else
echo "$0: $1 is not a file"
fi
}
Llamé a esta función "copia de seguridad" porque no tengo ningún otro comando llamado "copia de seguridad" en mi sistema, pero puede elegir el nombre que más le convenga.
El primer if
La declaración verifica para asegurarse de que solo se proporcione un argumento a la función; de lo contrario, imprime el uso correcto con echo
comando.
El elif
La instrucción comprueba para asegurarse de que el argumento proporcionado es un archivo, y si es así, utiliza (prolijamente) el segundo echo
para imprimir el cp
comando a utilizar y luego lo ejecuta.
Si el único argumento no es un archivo, el tercer echo
imprime un mensaje de error a tal efecto.
En mi directorio de inicio, si ejecuto backup
comando así definido en el archivo checkCounts.sql
, veo que backup
crea un archivo llamado checkCounts.sql.~1~
. Si lo ejecuto una vez más, veo un nuevo archivo checkCounts.sql.~2~
.
¡Éxito! Según lo planeado, puedo seguir editando checkCounts.sql
, pero si tomo una instantánea de vez en cuando con una copia de seguridad, puedo volver a la instantánea más reciente si tengo problemas.
En algún momento, es mejor comenzar a usar git
para el control de versiones, pero backup
como se definió anteriormente, es una buena herramienta barata cuando necesita crear instantáneas pero no está listo para git
.
Conclusión
En mi último artículo, les prometí que las tareas repetitivas a menudo se pueden simplificar fácilmente mediante el uso de scripts de shell, funciones de shell y alias de shell.
Aquí he mostrado ejemplos concretos del uso de alias de shell y funciones de shell para simplificar la funcionalidad de sincronización y copia de seguridad de cp
dominio. Si desea obtener más información al respecto, consulte los dos artículos citados anteriormente:Cómo guardar las pulsaciones de teclas en la línea de comandos con alias y secuencias de comandos de Shell:una introducción al método shift y las funciones personalizadas, escrito por mis colegas Greg y Seth , respectivamente.