Re: script tar con nomi directory contenenti spazi
Il 26/09/2016 00:37, beppe ha scritto: Lo script funziona bene finche' non incontra una directory con spazi: echo $data #IFS_OLD=$IFS #IFS=$'\n' # per controllare la data sleep 2 for i in $(ls -d /home/prove/*/ | cut -f4 -d'/' | sed 's/\ /\\ /g'); do tar -cvzf $data'_'${i%%/} '/home/prove/'${i%%/}; done #IFS=$IFS_OLD Evita di usare il comando ls nei cicli for e ti risparmi un sacco di problemi: for i in /home/prove/*; do if [ -d "$i" ]; then # è una directory tar -cvzf ${data}_"$(basename "$i")" "$i"; fi done -- Kind regards, Marco Romano
Re: script tar con nomi directory contenenti spazi
Il 26/09/2016 12:12, Piviul ha scritto: beppe ha scritto il 26/09/2016 alle 00:37: Lo script funziona bene finche' non incontra una directory con spazi: $ cat tar_backup.sh #!/bin/bash data=$data$(date | cut -d ' ' -f6 | cut -c 1-4) data=$data$(date | cut -d ' ' -f2) data=$data$(date | cut -d ' ' -f3) echo $data a questo punto permettimi anche di farti qualche pulce sulla ricerca della data; non è più semplice ricavarla con: data=$(date +%Y%b%d) (anche se userei +%Y%b%d solo per il fatto che puoi ordinare i backup effettuati per data più facilmente...) piuttosto che con 3 chiamate al comando date che fra le altre cose può essere prono agli errori in quanto dipende dalle impostazioni di default del comando date? Piviul Grazie, e' vero... uso spesso cut per i campi e spesso non cerco la cosa piu' ovvia. ciao Bepep -- le nuvole non hanno regole, perchè non hanno mai rinunciato alla libertà di sognare.
Re: script tar con nomi directory contenenti spazi
Piviul ha scritto il 26/09/2016 alle 12:12: [...] (anche se userei +%Y%b%d [...] intendevo +%Y%m%d...ovviamente! Piviul
Re: script tar con nomi directory contenenti spazi
beppe ha scritto il 26/09/2016 alle 00:37: Lo script funziona bene finche' non incontra una directory con spazi: $ cat tar_backup.sh #!/bin/bash data=$data$(date | cut -d ' ' -f6 | cut -c 1-4) data=$data$(date | cut -d ' ' -f2) data=$data$(date | cut -d ' ' -f3) echo $data a questo punto permettimi anche di farti qualche pulce sulla ricerca della data; non è più semplice ricavarla con: data=$(date +%Y%b%d) (anche se userei +%Y%b%d solo per il fatto che puoi ordinare i backup effettuati per data più facilmente...) piuttosto che con 3 chiamate al comando date che fra le altre cose può essere prono agli errori in quanto dipende dalle impostazioni di default del comando date? Piviul
Re: script tar con nomi directory contenenti spazi
Il 26/09/2016 09:09, Piviul ha scritto: beppe ha scritto il 26/09/2016 alle 00:37: Lo script funziona bene finche' non incontra una directory con spazi: $ cat tar_backup.sh #!/bin/bash data=$data$(date | cut -d ' ' -f6 | cut -c 1-4) data=$data$(date | cut -d ' ' -f2) data=$data$(date | cut -d ' ' -f3) echo $data #IFS_OLD=$IFS #IFS=$'\n' # per controllare la data sleep 2 for i in $(ls -d /home/prove/*/ | cut -f4 -d'/' | sed 's/\ /\\ /g'); do tar -cvzf $data'_'${i%%/} '/home/prove/'${i%%/}; done io credo che il problema risieda nelle linee che hai commentato. Di default IFS (Internal File Separator) è lo spazio quindi questo ciclo non funziona bene. Devi appunto decommentare le righe che riguardano l'IFS. Poi sinceramente mi sembra anche macchinoso (oltre che non capisco cosa faccia il comando ${i%%/} ma questo è un limte mio) il ciclo for che hai costruito... io il ciclo lo riscriverei così: for d in $(ls -d /home/prove/*); do dir=$(basename $d) tar cvzf "$data_$dir" "$d" done in ogni caso se vuoi mantenere la tua versione ocho che tar considera lo spazio come separatore dei suoi argomenti. Devi quindi quotare i riferimenti alle dir dentro /home/prove Ciao Piviul i cicli funzionavano tutti correttamente meno che con i nomi directory contenenti spazi. Avevo provato sia con IFS=$'\n', sia senza. Con il tuo ciclo for adesso mi sembrano corretti anche con piu' spazi nei nomi, rimettendo IFS=$'\n'. Grazie 1000!!! ciao Beppe -- le nuvole non hanno regole, perchè non hanno mai rinunciato alla libertà di sognare.
Re: script tar con nomi directory contenenti spazi
beppe ha scritto il 26/09/2016 alle 00:37: Lo script funziona bene finche' non incontra una directory con spazi: $ cat tar_backup.sh #!/bin/bash data=$data$(date | cut -d ' ' -f6 | cut -c 1-4) data=$data$(date | cut -d ' ' -f2) data=$data$(date | cut -d ' ' -f3) echo $data #IFS_OLD=$IFS #IFS=$'\n' # per controllare la data sleep 2 for i in $(ls -d /home/prove/*/ | cut -f4 -d'/' | sed 's/\ /\\ /g'); do tar -cvzf $data'_'${i%%/} '/home/prove/'${i%%/}; done io credo che il problema risieda nelle linee che hai commentato. Di default IFS (Internal File Separator) è lo spazio quindi questo ciclo non funziona bene. Devi appunto decommentare le righe che riguardano l'IFS. Poi sinceramente mi sembra anche macchinoso (oltre che non capisco cosa faccia il comando ${i%%/} ma questo è un limte mio) il ciclo for che hai costruito... io il ciclo lo riscriverei così: for d in $(ls -d /home/prove/*); do dir=$(basename $d) tar cvzf "$data_$dir" "$d" done in ogni caso se vuoi mantenere la tua versione ocho che tar considera lo spazio come separatore dei suoi argomenti. Devi quindi quotare i riferimenti alle dir dentro /home/prove Ciao Piviul
Re: script tar con nomi directory contenenti spazi
Il 26/09/2016 04:12, Teodoro Santoni ha scritto: Ciao, Il 25/09/16, beppeha scritto: Lo script funziona bene finche' non incontra una directory con spazi: $ cat tar_backup.sh #!/bin/bash data=$data$(date | cut -d ' ' -f6 | cut -c 1-4) data=$data$(date | cut -d ' ' -f2) data=$data$(date | cut -d ' ' -f3) echo $data #IFS_OLD=$IFS #IFS=$'\n' # per controllare la data sleep 2 for i in $(ls -d /home/prove/*/ | cut -f4 -d'/' | sed 's/\ /\\ /g'); do tar -cvzf $data'_'${i%%/} '/home/prove/'${i%%/}; done #IFS=$IFS_OLD avevo provato a ridefinire IFS, ma quando tar riceve i parametri non li legge correttamente. (al momento ho risolto rinominando le directory sostituendo gli spazi con '_' ma non e' una buona idea per i files che hanno link ad altri files) Come argomento a sed potresti provare con 's/ /\\ /g'. Io rifarei tutto il ciclo del coso in tar da capo a dir il vero, ad esempio con: printf "%s\n" /home/prove/*/ | while read ; do bn=$(basename $REPLY) ; tar -cvzf $data"_$bn" "$REPLY" ; done Perfetto! Non avevo pensato a basename... Grazie 1000!!! ciao Beppe -- le nuvole non hanno regole, perchè non hanno mai rinunciato alla libertà di sognare.
Re: script tar con nomi directory contenenti spazi
Ciao, Il 25/09/16, beppeha scritto: > Lo script funziona bene finche' non incontra una directory con spazi: > > $ cat tar_backup.sh > #!/bin/bash > data=$data$(date | cut -d ' ' -f6 | cut -c 1-4) > data=$data$(date | cut -d ' ' -f2) > data=$data$(date | cut -d ' ' -f3) > echo $data > #IFS_OLD=$IFS > #IFS=$'\n' > > # per controllare la data > sleep 2 > for i in $(ls -d /home/prove/*/ | cut -f4 -d'/' | sed 's/\ /\\ /g'); do > tar -cvzf $data'_'${i%%/} '/home/prove/'${i%%/}; done > > #IFS=$IFS_OLD > > avevo provato a ridefinire IFS, ma quando tar riceve i parametri non li > legge correttamente. > (al momento ho risolto rinominando le directory sostituendo gli spazi > con '_' > ma non e' una buona idea per i files che hanno link ad altri files) Come argomento a sed potresti provare con 's/ /\\ /g'. Io rifarei tutto il ciclo del coso in tar da capo a dir il vero, ad esempio con: printf "%s\n" /home/prove/*/ | while read ; do bn=$(basename $REPLY) ; tar -cvzf $data"_$bn" "$REPLY" ; done
script tar con nomi directory contenenti spazi
Lo script funziona bene finche' non incontra una directory con spazi: $ cat tar_backup.sh #!/bin/bash data=$data$(date | cut -d ' ' -f6 | cut -c 1-4) data=$data$(date | cut -d ' ' -f2) data=$data$(date | cut -d ' ' -f3) echo $data #IFS_OLD=$IFS #IFS=$'\n' # per controllare la data sleep 2 for i in $(ls -d /home/prove/*/ | cut -f4 -d'/' | sed 's/\ /\\ /g'); do tar -cvzf $data'_'${i%%/} '/home/prove/'${i%%/}; done #IFS=$IFS_OLD avevo provato a ridefinire IFS, ma quando tar riceve i parametri non li legge correttamente. (al momento ho risolto rinominando le directory sostituendo gli spazi con '_' ma non e' una buona idea per i files che hanno link ad altri files) Grazie. ciao Beppe -- le nuvole non hanno regole, perchè non hanno mai rinunciato alla libertà di sognare.