PDA

Visualizza la versione completa : bash: /bin/rm: Argument list too long


daviweb
07-12-2004, 13:05
Volendo eliminare tutti i messaggi presenti in quarantena, ho dato il seguente comando.

#rm -r /var/spool/qmailscan/quarantine/new/*

Ha funzionato senza problemi, così l'ho messo in cron.daily ma dopo qualche giorno mi sono accorto che i file non venivano cancellati!
Ho quindi lanciato a mano lo script e mi ha restituitop questo messaggio:
bash: /bin/rm: Argument list too long

Infatti la differenza è che adesso ci sono dentro molti file...


...e quindi? E' sbagliato cancellare i file di una directory in quel modo? Come si dovrebbe fare? :confused:

Ciao

kentaromiura
07-12-2004, 13:19
rm -Rf /var/spool/qmailscan/quarantine/new
mkdir /var/spool/qmailscan/quarantine/new

Ilmalcom
07-12-2004, 13:22
La butto li` perche` ora non posso provarla, ma forse xargs puo` fare al caso tuo.


ls /var/spool/qmailscan/quarantine/new/ | xargs rm -rf

Non mi assumo responsabilita` :)

kentaromiura
07-12-2004, 13:27
Originariamente inviato da Ilmalcom
La butto li` perche` ora non posso provarla, ma forse xargs puo` fare al caso tuo.


ls /var/spool/qmailscan/quarantine/new/ | xargs rm -rf

Non mi assumo responsabilita` :)
http://openskills.info/view/boxdetail.php?IDbox=928&boxtype=commands
:D
comunque penso che il problema sia che i file superano i 36000passa(quando si fa un ./configure viene scritto il massimo numero di caratteri..) caratteri della shell bash..

daviweb
07-12-2004, 14:43
Originariamente inviato da Ilmalcom
La butto li` perche` ora non posso provarla, ma forse xargs puo` fare al caso tuo.


ls /var/spool/qmailscan/quarantine/new/ | xargs rm -rf

Non mi assumo responsabilita` :)

Quasi giusta! :D

Dando solo questo venivano passati a xargs solo i nomi dei file, senza il percorso completo, quindi non trovava i file da cancellare.
Quindi è bastato aggiungere un "cd":

cd /var/spool/qmailscan/quarantine/new/
ls /var/spool/qmailscan/quarantine/new/ | xargs rm -rf

Poi per sicurezza ho lasciato l'intero pecorso anche dopo "ls"... mi inquietava un po' vedere quel comando da solo! :stordita:
A proposito, se in uno script del genere una riga dà errore, si bloca tutto o va avanti lo stesso?


Grazie!

Ilmalcom
07-12-2004, 17:27
Originariamente inviato da daviweb
A proposito, se in uno script del genere una riga dà errore, si bloca tutto o va avanti lo stesso?


Grazie!
va avanti stampando gli errori, se non sopprimi l'output

daviweb
07-12-2004, 17:33
Capito!

Grazie ancora, alla prossima! :D

:ciauz:

daviweb
21-04-2005, 11:47
Mi piacerebbe migliorare questo script, facendo in modo che cancelli solo i file più vecchi di 10 giorni. In modo cioè di avere sempre la quarantena degli ultimi 9 giorni. Come potrei fare? :confused:
Purtroppo non sono pratico di script del genere... :rollo:

Grazie

cacao74
21-04-2005, 12:11
find /var/spool/qmailscan/quarantine/new/ -mtime +10 -exec rm -rf '{}' ';'

provalo prima su una directory di 'test', magari così modificato:
find /var/spool/qmailscan/quarantine/new/ -daystart -mtime +10 -exec echo "rm -rf" '{}' ';'

ciao

stai_tranquillo
21-04-2005, 12:20
potresti pure farglielo fare file per file..

for x in /var/spool/qmailscan/quarantine/new/*; do rm -rf $x; done


provalo...?

Loading