Tengo la siguiente estructura de directorios:
/test_dir/logs: admin-access.log admin-access.log00001 admin-access.log00002 admin-access.log00003 admin-access.log00004 admin-access.log00005 /test_dir/installer_logs: AITimeListener.log installer.log /test_dir/servers/clust1/logs/: clust1.out clust1.out00001 clust1.out00002 clust1.out00003 clust1.out00004Estoy usando el siguiente conjunto de comandos para archivar la carpeta con exclusiones:
cd /test_dir/ tar -czhf /backup/test_dir_node01_2016-02-19_initial.tgz --anchored --exclude "logs/*" --exclude "servers/*/logs/*" --exclude "installer_logs/*" *Y como resultado, obtuve la siguiente estructura de directorios después de archivar untar:
/backup/logs: no files here /backup/installer_logs: no files here /backup/servers/clust1/logs/: no files hereEstoy tratando de codificar el script bash que se supone que debe hacer lo mismo y sin suerte, aquí está mi código:
archivo backup.parameters:
NC_HOME=/test_dir BACKUP_HOME=/backup EXCLUDE_LIST=" --exclude \"logs/*\" --exclude \"servers/*/logs/*\" --exclude \"installer_logs/*\" "archivo backup_initial.sh
#!/bin/bash if [ ! -f backup.parameters ]; then echo "backup.parameters file not found! exiting...."; exit 1; fi . ./backup.parameters TAR_ARGS="czf" DATE=`date +%F` HOSTNAME=`hostname` cd $NC_HOME echo "Initial backup started on $HOSTNAME at `date \"+%F %T\"`" tar -czhf $BACKUP_HOME/$(basename $NC_HOME)_"$HOSTNAME"_"$DATE"_initial.tgz --anchored $EXCLUDE_LIST * echo "Initial backup finished on $HOSTNAME at `date \"+%F %T\"`" echo "Initial backup location: $BACKUP_HOME/$(basename $NC_HOME)_"$HOSTNAME"_"$DATE"_initial.tgz"Después de descomprimir el archivo creado por el script, veo que todavía hay archivos en los directorios de exclusión:
/backup/logs: admin-access.log admin-access.log00001 admin-access.log00002 admin-access.log00003 admin-access.log00004 admin-access.log00005 /backup/installer_logs: AITimeListener.log installer.log /backup/servers/clust1/logs/: clust1.out clust1.out00001 clust1.out00002 clust1.out00003 clust1.out00004Por favor, ayuda, ¿cómo puedo codificar esto? Tampoco me aconsejen que use la opción -X. Realmente necesito hacerlo con --exclude.
Intente cambiar EXCLUDE_LIST a:
EXCLUDE_LIST=( --exclude 'logs/*' --exclude 'servers/*/logs/*' --exclude 'installer_logs/*' )Y luego expandirlo así:
tar -czhf ... --anchored "${EXCLUDE_LIST[@]}" * La razón por la que lo que está haciendo ahora no funciona es porque EXCLUDE_LIST se está expandiendo a --exclude --exclude "logs/*" ... . Las comillas dobles no se eliminan y siguen siendo parte del argumento, por lo que el patrón no coincide con nada, ya que no tiene ningún archivo o directorio que tenga comillas dobles en sus nombres.