Newsgroup: it.comp.os.linux.iniziare
Titolo: comprimere con tar file che sottostanno a certe condizioni

Salve a tutti, avrei bisogno di " tarrare" parte di una lista di file
che contengono una certa parola, mi spiego meglio:
ho migliaia di file in una directory e mi serve di "tarrare" (ammazza
quanto è brutto questo verbo?:-)) solo i file che contengono una
determinata paroola. Sono riuscito ad individuare con grep le righe
dei file che contangono quella parola "giornaliero", ma come faccio a
sapere quali sono i nomi dei file che devo dare in pasto al tar?
Ho anche un altro problema sia il tar che il grep mi danno un errore
dekl tipo lista degli argomenti troppo lunga, ma questo penso sia
dovuto al fatto che i file sono circa 5000 e la lunghezza del nome di
ogni file è mediamente di 45 caratteri

 determinata paroola.
ci sono svariati modi, uno può essere questo:
cd la directory
grep $PAROLA -l * | xargs tar -cvzf ~/archivio.tgz

  5000 e la lunghezza del nome di ogni file è mediamente di 45 caratteri
Tutte chiacchiere. 
Devi postare L'ESATTO MESSAGGIO DI ERRORE CHE OTTIENI DALLA SHELL!
E non hai scuse, USA IL COPIA & INCOLLA!
E come fai ad ottenere quel messaggio di errore con grep?
Capisco che non sai le cose elementari, capisco che non sai come gestire
cinquemila file con tar, ma che cavolo di comando hai dato per ottenere 
quell'errore con grep?
Nonostante la tua maleducazione oggi sono felice:
La lunghezza del nome del file non c'entra (con GNU tar, con gli altri la
lunghezza massima e` cento caratteri); dai troppi file in pasto a tar
tmpfile=$(mktemp -t nomifile.XXXX)
grep -l $regexp $files > $tmpfile
tar -c -f $archivio.tar -T $tmpfile 
rm -f $tmpfile
man mktemp
man grep
man tar
my two cent

mallin.shetland wrote:

man valium

 man valium
ROTFL!

 grep $PAROLA -l * | xargs tar -cvzf ~/archivio.tgz
Non funziona.
quello che volevi fare e`:
tar -cvzf ~/archivio.tgz $dummyfile ||
grep $PAROLA -l * | xargs tar -rvzf ~/archivio.tgz
ma, a parte il trucco di bassa lega, non e` molto bello.
info tar
*Note append::.

 quello che volevi fare e`:
veramente  l'ho provato prima di postarlo.
Perchè dici che non funziona?
forse non funzioona in qualche caso? 
ah, sono conscio che funziona solo nel primo livello sotto alla dir
corrente, ma avevo capito che questa fosse la situazione.
Per quanto riguarda la bellezza, sticazzi :)

 Perchè dici che non funziona?
Si devono archiviare oltre cinquemila file ma, come sanno 
tutti, si possono specificare al massimo qualche centinaio
di parametri; si ricorre percio` a xargs.
xargs riceve come input il nome di tutti i cinquemila 
file, prende i primi cento o duecento file, costruisce il 
seguente comando:
tar -cvzf ~/archivio.tgz file1 file2 [...] file200
ed avvia questo processo; per default xargs aspetta che 
questo processo termini.
Ora abbiamo un archivio tar compresso che contiene i primi 
duecento file.
Ma ci sono ancora moltissimi file da processare percio` 
xargs prende i successivi duecento file e costruisce il 
seguente comando:
tar -cvzf ~/archivio.tgz file200file202 [...] file400
e lo esegue.
Ora tar si dovrebbe lamentare che il file ~/archivio.tgz 
gia` esiste ma, ovviamente, tar, obbidientemente,  crea,
tacendo, un archivio con i file da 201 a 400 e cancella 
l'archivio precedente.
E si itera finche` si termina la lista di file.
Esercizio: alla fine cosa conterra` l'archivio?

 grep $PAROLA -l * | xargs tar -rvzf ~/archivio.tgz
Mi sono accorto solo ora che cì'e` un errore: tar non 
permette l'aggiunta o la cancellazione di di filo negli
archivi compressi, per cui:
tar -cvf ~/archivio.tar $dummyfile ||
grep $PAROLA -l * | xargs tar -rvf ~/archivio.tar
e se proprio si vuole usare la compressione si
usa gzip dopo.

Esercizio: alla fine cosa conterra` l'archivio?
Vabbe' -c gli impone di sovrascrivere, ma non protesta
nonostante il -v (o almeno: da me non ha battuto ciglio),
dunque ci saranno solo quelli da 4901 a 5000.
Ma in ogni caso se li comprimi non puo' concatenarli.
Pero' me lo sai dire che differenza c'e' tra -A e -r ?
Perche' con -rf funge e con -Af mi da' invece errore?
-- 
Saluti, Dalet

 che differenza c'e' tra -A e -r ?
-A concatena archivi a un archivio, mentre -r aggiunge file a un
archivio.
-- 
Bye, Lem
Ceterum censeo ISLAM esse delendum
__________________________________
Combatti l'AIDS col tuo computer: 
http://fightaidsathome.scripps.edu/

archivio.
TNX, ora e' chiaro perche' tar mi diceva "Salto alla prossima
intestazione" e poi dava errore.
(tutto perche' non capivo che tar non fa come
cat nuovo >> vecchio, come immaginavo io)
-- 
Saluti, Dalet

 Perche' con -rf funge e con -Af mi da' invece errore?
Con -rf aggiungi dei file ad un archivio, e funziona.
Con -Af tar si aspetta altri archivi tar ma tu fornisci dei file
che non sono archivi tar e tar da un errore.
 

 grep $PAROLA -l * | xargs tar -cvzf ~/archivio.tgz
tar può leggere direttamente dall'output di grep usando -T -
(o --files-from=-).

...
Be' era proprio questo che non capivo, TNX, non notavo
quel "tar file" invece di "file" finche' non me l'ha detto
anche Lem Novantotto.
-- 
Saluti, Dalet

 di parametri; si ricorre percio` a xargs.
azz, ci hai ragione 

 (o --files-from=-).
Suggerirei anche di usare l'opzione --null di grep (e di ripeterla
ovviamente in xargs, se lo si usa nel pipe), visto che i nomi dei
file possono contenere caratteri ambigui.


RedWiz wrote:

C'è anche la possibilità di utilizzare dei file che contengono liste di file
da includere e da escludere.