Soy nuevo en bash, así que estoy un poco perdido con este script que hice para hacer una copia de seguridad de algunos directorios de la máquina local en un NAS. El NAS solo contendrá una cierta cantidad de archivos respaldados, así que antes de copiar uno nuevo, elimino el más antiguo de los existentes.
En primer lugar, la secuencia de comandos define todas las rutas, directorios y nombres de archivos en variables
# Defines directories
ORIGEN='/Library/path-to-directories/'
DESTINAS='/Volumes/path-to-backup/'
DESTITAR='/Library/path-to-temp/'
# Defines names of the files and folders to delete (OLDDIR) and copy (NEWDIR)
OLDTAR='/bin/ls /Volumes/path-to-backup/ | head -n 1'
NEWDIR='/bin/ls /Library/path-to-directories/ | tail -n 1'
Luego usando la variable la nombra: Crea un archivo comprimido tar desde el directorio original. El archivo tar se guarda en un directorio temporal separado.
/usr/bin/sudo /usr/bin/tar -czf "$DESTITAR$NEWDIR.tgz" "$ORIGEN$NEWDIR"
Elimina los archivos tar más antiguos del NAS:
/usr/bin/sudo /bin/rm $DESTINAS$OLDTAR
Copia el archivo tar en el NAS:
/usr/bin/sudo /bin/cp -Rp "$DESTITAR$NEWDIR.tgz" $DESTINAS
Borra el archivo tar del directorio temporal:
/usr/bin/sudo /bin/rm -f "$DESTITAR$NEWDIR.tgz"
La secuencia de comandos se ejecuta sin ser atendida por un usuario que ha sido debidamente autorizado a través de cambios en el archivo sudoers. Todo funciona sin problemas, excepto en este paso:
/usr/bin/sudo /bin/rm $DESTINAS$OLDTAR
El archivo de registro no muestra errores, pero no hay nada en lugar de la variable $OLDTAR
, ya que no se resuelve, por lo que realmente se ejecuta:
/usr/bin/sudo /bin/rm /Volumes/path-to-backup/
Sin embargo, si ejecuto los comandos en el terminal uno por uno, lo hago funcionar bien. Puede ser un problema de permisos de usuario?