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

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
tgmx
Linux 4.x
Linux 4.x
Messaggi: 1336
Iscritto il: ven 28 apr 2006, 14:40
Slackware: 14.1
Desktop: KDE 4
Località: Ancona

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

Messaggio 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... :-)
Ultima modifica di tgmx il mer 23 mag 2012, 8:44, modificato 1 volta in totale.

Avatar utente
conraid
Staff
Staff
Messaggi: 13630
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: tar, comprimere singolarmente i file di una directory

Messaggio 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

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6631
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: tar, comprimere singolarmente i file di una directory

Messaggio 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
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
tgmx
Linux 4.x
Linux 4.x
Messaggi: 1336
Iscritto il: ven 28 apr 2006, 14:40
Slackware: 14.1
Desktop: KDE 4
Località: Ancona

Re: tar, comprimere singolarmente i file di una directory

Messaggio 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.

Avatar utente
cymon
Linux 2.x
Linux 2.x
Messaggi: 430
Iscritto il: ven 5 gen 2007, 1:40
Slackware: 13.1
Kernel: 2.6.33.4-smp
Desktop: Fluxbox
Località: Milano
Contatta:

Re: tar, comprimere singolarmente i file di una directory

Messaggio 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.

Avatar utente
tgmx
Linux 4.x
Linux 4.x
Messaggi: 1336
Iscritto il: ven 28 apr 2006, 14:40
Slackware: 14.1
Desktop: KDE 4
Località: Ancona

Re: tar, comprimere singolarmente i file di una directory

Messaggio 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!

Avatar utente
conraid
Staff
Staff
Messaggi: 13630
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

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

Messaggio 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 *

Avatar utente
tgmx
Linux 4.x
Linux 4.x
Messaggi: 1336
Iscritto il: ven 28 apr 2006, 14:40
Slackware: 14.1
Desktop: KDE 4
Località: Ancona

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

Messaggio da tgmx »

Grande!
Sempre piu' facile... gzip fa miracoli ed io lo ignoravo completamente.

Rispondi