Pagina 1 di 1

tar, comprimere singolarmente i file di una directory [RIS]

Inviato: mar 22 mag 2012, 11:56
da tgmx
Ciao a tutti,

sto cercando di fare un piccolo script, lanciato da cron che comprima i file che si trovano in una directory creando un tar.gz singolo per ogni file.

Es:
se la directory contiene i file:
a.dat
b.dat
c.dat

vorrei ottenere con un solo passaggio:
a.tar.gz
b.tar.gz
c.tar.gz

e se proprio vogliamo esagerare non sarebbe male eliminare l'originale dopo la conpressione...

Avete idee... :-)

Re: tar, comprimere singolarmente i file di una directory

Inviato: mar 22 mag 2012, 12:39
da conraid
una cosa simile

Codice: Seleziona tutto

for FILE in "*"; do tar -czf $(basename $FILE).tar.gz $FILE; done
anche se migliorabile, per eliminare ti basta rm $FILE

prova così

Codice: Seleziona tutto

for FILE in "*"; do
tar -czf $(basename $FILE).tar.gz $FILE
rm $FILE
done

Re: tar, comprimere singolarmente i file di una directory

Inviato: mar 22 mag 2012, 16:50
da targzeta
Per eliminare i file basta questa opzione di tar:

Codice: Seleziona tutto

  --remove-files
              remove files after adding them to the archive
però, parliamone, che senso ha creare un archivio con dentro solo un file? Non è più semplice zipparlo se vuoi ridurne lo spazio? Cioé, un archivio è un archivio...no?

Emanuele

Re: tar, comprimere singolarmente i file di una directory

Inviato: mar 22 mag 2012, 21:02
da tgmx
conraid ha scritto:una cosa simile

Codice: Seleziona tutto

for FILE in "*"; do tar -czf $(basename $FILE).tar.gz $FILE; done
anche se migliorabile, per eliminare ti basta rm $FILE

prova così

Codice: Seleziona tutto

for FILE in "*"; do
tar -czf $(basename $FILE).tar.gz $FILE
rm $FILE
done
Grazie.
Ho dovuto aggiungere le virgolette su:

Codice: Seleziona tutto

basename "$FILE"
altrimenti basename dava errore.

Così però mi crea un unico archivio con tutti i file dentro.
Apparentemente il FOR non scorre il contenuto della directory ma restituisce l'elenco dei file mettendoli tutti dentro la variabile FILE in una sola volta.

Re: tar, comprimere singolarmente i file di una directory

Inviato: mer 23 mag 2012, 2:03
da cymon
Non è più carino:

Codice: Seleziona tutto

find . -exec tar czvf {}.tar.gz {} \; ?
comunque il tar di un singolo file è effettivamente inutile, a questo punto, se proprio serve, meglio partire direttamente con gzip.

Re: tar, comprimere singolarmente i file di una directory

Inviato: mer 23 mag 2012, 8:44
da tgmx
cymon ha scritto:Non è più carino:

Codice: Seleziona tutto

find . -exec tar czvf {}.tar.gz {} \; ?
comunque il tar di un singolo file è effettivamente inutile, a questo punto, se proprio serve, meglio partire direttamente con gzip.
Perfetto,
così funziona. Grazie.

Per quanto riguarda gzip, l'ho appena provato in questo modo:

Codice: Seleziona tutto

find ./*.dat -exec gzip {} \;
ed effettivamente lavora meglio dato che elimina anche l'originale.

Grazie a tutti!

Re: tar, comprimere singolarmente i file di una directory [R

Inviato: mer 23 mag 2012, 10:25
da conraid
per basename si vede che hai nomi di file con spazi, per il for forse c'è qualche errore di sintassi

se usi gzip, ti basta gzip *

Re: tar, comprimere singolarmente i file di una directory [R

Inviato: mer 23 mag 2012, 10:33
da tgmx
Grande!
Sempre piu' facile... gzip fa miracoli ed io lo ignoravo completamente.