Newsgroup: it.comp.os.linux.iniziare
Titolo: cancellare files più vecchi di

Ho seguito questa guida:
http://www.howtogeek.com/howto/ubuntu/delete-files-older-than-x-days-on-linux/
 
per cancellare i files piï¿œ vecchi di tot giorni sulla pendrive montata 
sul mio router ddwrt. Perï¿œ busybox (spero almeno sia lui, io non ne 
capisco nulla in veritï¿œ) non accetta il parametro -mtime.
Su cosa posso ripiegare?

 capisco nulla in verità) non accetta il parametro -mtime.
 
Se non capisci nulla potresti anche fare a meno di manomettere 
il tuo router. 
 
Strano: AFAIK busybox accetta *SOLO* -mtime e -mmin.
Comunque posta i risultati di uname -a 
 

 Comunque posta i risultati di uname -a
 
root@DD-WRT /mnt $ uname -a
Linux DD-WRT 2.6.24.111 #1025 Wed Feb 24 07:31:55 CET 2010 mips GNU/Linux
 
 
 
 

 ...
 
Versione non recente di busybox immegino due scenari:
 - le caratteristiche che ti servono sono state implementate in 
   una versione successiva
 - le caratteristiche che ti servono sono state esculse dalla 
   compilazione
 
In questi casi l'idea è questa:
 
find directory |
while read afile 
 do 
  datamodifica = $(ls -l $afile | cut ...) 
  if $datamodifica precedente 5 giorni
     rm -f $afile
done 
 
Non ho busybox sottomano. Vediamo cosa riesco a ricavare 
questo pomeriggio. A più tardi
 
 
 

     compilazione
 
Purtroppo mi par di capire che è il contrario: prima c'erano, e poi 
nelle versioni successive sono state rimosse. Io però sono vincolato a 
questa. :(

 questo pomeriggio. A più tardi
 
 
#! /bin/sh
 
T=`date -d '00:00 - 5 day' +%s`
 
find ~/etc -type f  -print0 |
  while IFS= read -r -d '' afile
    do 
      mtime=`stat -c%Y $afile`
      if [ "$mtime" -gt  "$T" ]
         then
            echo $mtime $afile 
#
# rimuovi i commenti se ti vuoi fare male 
#
#   rm -f  "$afile"
#         
      fi
done
 
 
Primo tentativo. vediamo se funziona su busybox
 

 Usage: find [PATH...] [EXPRESSION]
 
Passa alla Debian wheezy, guarda:
 
$: busybox find --help
 
BusyBox v1.19.3 (Debian 1:1.19.3-7) multi-call binary.
 
Usage: find [PATH]... [OPTIONS] [ACTIONS]
 
Search for files and perform actions on them.
First failed action stops processing of current file.
Defaults: PATH is current directory, action is '-print'
 
	-follow		Follow symlinks
	-xdev		Don't descend directories on other filesystems
	-maxdepth N	Descend at most N levels. -maxdepth 0 applies
			actions to command line arguments only
	-mindepth N	Don't act on first N levels
	-depth		Act on directory *after* traversing it
 
Actions:
	( ACTIONS )	Group actions for -o / -a
	! ACT		Invert ACT's success/failure
	ACT1 [-a] ACT2	If ACT1 fails, stop, else do ACT2
	ACT1 -o ACT2	If ACT1 succeeds, stop, else do ACT2
			Note: -a has higher priority than -o
	-name PATTERN	Match file name (w/o directory name) to PATTERN
	-iname PATTERN	Case insensitive -name
	-path PATTERN	Match path to PATTERN
	-ipath PATTERN	Case insensitive -path
	-regex PATTERN	Match path to regex PATTERN
	-type X		File type is X (one of: f,d,l,b,c,...)
	-perm MASK	At least one mask bit (+MASK), all bits (-MASK),
			or exactly MASK bits are set in file's mode
	-mtime DAYS	mtime is greater than (+N), less than (-N),
			or exactly N days in the past
	-mmin MINS	mtime is greater than (+N), less than (-N),
			or exactly N minutes in the past
	-newer FILE	mtime is more recent than FILE's
	-inum N		File has inode number N
	-user NAME/ID	File is owned by given user
	-group NAME/ID	File is owned by given group
	-size N[bck]	File size is N (c:bytes,k:kbytes,b:512 bytes(def.))
			+/-N: file size is bigger/smaller than N
	-links N	Number of links is greater than (+N), less than (-N),
			or exactly N
	-prune		If current file is directory, don't descend into it
If none of the following actions is specified, -print is assumed
	-print		Print file name
	-print0		Print file name, NUL terminated
	-exec CMD ARG ;	Run CMD with all instances of {} replaced by
			file name. Fails if CMD exits with nonzero
 
-- 
Tanti saluti
 

 echo $mtime $afile
 
Mi viene in mente che, per migliorare la "leggibilità umana" della data, 
si potrebbe riconvertirla al volo usando l'@.
 
Qualcosa come:
 
echo `date -d@$mtime` $afile
 
Magari questo uso di @ è cosa notissima, ma non mi pare stia né nel man 
né nell'info, e io l'ho imparata da poco.
-- 
Bye, Lem
Ceterum censeo ISLAM esse delendum
_________________________________________________________________
Non sprecare i cicli idle della tua CPU, né quelli della tua GPU.
 
http://www.worldcommunitygrid.org/index.jsp
 
http://www.rnaworld.de/rnaworld/
 
http://home.edges-grid.eu/home/
 
 
http://www.gpugrid.net/
 

 done
 
date: invalid date '00:00 - 5 day'
./prova: read: line 16: illegal option -d
 

 ./prova: read: line 16: illegal option -d
 
ops, avevo rimosso alcune righe commentate, la 16 è: done.
 

 né nell'info, e io l'ho imparata da poco.
 
echo serve per il debug; se lo script funziona dovrà essere 
sostituito da qualcosa come:
 
rm -f "$afile"
 
Ragion per cui ce ne freghiamo della leggibilità, dei manuali e
dei rompipalle e continuiamo ad usare lo UNIX time se date e
busybox lo consentono.
 
Ad Maiora

 ops, avevo rimosso alcune righe commentate, la 16 è: done.
 
Hai rimaneggiato anche i messaggi di errore per caso?
 
date serve solo a sapere l' UNIX time di cinque giorni fa, puoi
pure calcolarlo sul tuo computer e passarlo a mano
 
es 
 
T=1337724000
 
 
oppure 
 
 
$ cat cancellavecchi
 
#! /bin/sh
 
if [ $# ge 1 ];   then  T=$1 ; fi
 
find ~/etc -type f -print0 |
while IFS= read -r -d '' afile
 do
   mtime=`stat -c%Y $afile`
    if [ "$mtime" -gt "$T" ]
      then
        echo $mtime $afile
       #
       # rimuovi i commenti se ti vuoi fare male
       #
       # rm -f "$afile"
       #
     fi
 done
 
$ ./cancellavecchi 1337724000
 

 Ad Maiora
 
Perché, ci sono maiora qui?


 suggerire io, si migliorerebbe tale opportunità.
 
Punto a tuo favore.  
 
 

 while IFS= read -r -d '' afile
 
però il problema di "illegal option -d" ancora permane. Presumo dipenda 
dalla riga che ho citato.

 dalla riga che ho citato.
 
e quando levo -d dalla riga con read ottengo "bad variable name" sulla 
riga "done".

Remor ha scritto:

e comunque forse non è il caso di andare avanti. se stat è un comando 
del sistema, allora non è riconosciuto:
 
$ stat
-sh: stat: non found
 
forse ci sarà un qualche pacchetto da installare per estendere l'insieme 
dei comandi disponibili, ma io non lo conosco. :(

 dei comandi disponibili, ma io non lo conosco. :(
 
Non ho ben capito: se puoi installare pacchetti installa quello
contenente find.
 
 

 né nell'info, e io l'ho imparata da poco.
 
Sì è notissimo.
 
$ info date
 
...
 
27.8 Seconds since the Epoch
============================
 
If you precede a number with `@', it represents an internal time stamp
as a count of seconds.  The number can contain an internal decimal
point (either `.' or `,'); any excess precision not supported by the
internal representation is truncated toward minus infinity.  Such a
number cannot be combined with any other date item, as it specifies a
complete time stamp.
 
   Internally, computer times are represented as a count of seconds
since an epoch--a well-defined point of time.  On GNU and POSIX
systems, the epoch is 1970-01-01 00:00:00 UTC, so `@0' represents this
time, `@1' represents 1970-01-01 00:00:01 UTC, and so forth.  GNU and
most other POSIX-compliant systems support such times as an extension
to POSIX, using negative counts, so that `@-1' represents 1969-12-31
23:59:59 UTC.
 
   Traditional Unix systems count seconds with 32-bit two's-complement
integers and can represent times from 1901-12-13 20:45:52 through
2038-01-19 03:14:07 UTC.  More modern systems use 64-bit counts of
seconds with nanosecond subcounts, and can represent all the times in
the known lifetime of the universe to a resolution of 1 nanosecond.
 
   On most hosts, these counts ignore the presence of leap seconds.
For example, on most hosts `@915148799' represents 1998-12-31 23:59:59
UTC, `@915148800' represents 1999-01-01 00:00:00 UTC, and there is no
way to represent the intervening leap second 1998-12-31 23:59:60 UTC.
 
...

 3) date non ha l'opzione -d o forse la chiama -D
 
Quando leggo un tuo script, io mi avvicino a prenderlo per oro colato. ;)
 
E visto che tu stesso avevi usato "date -d":
 
T=`date -d '00:00 - 5 day' +%s`
 
ovviamente riusarlo non avrebbe minimamente inciso sulle probabilità 
dello script di girare con successo. Purtroppo poi è venuto fuori che 
l'opzione -d non va come dovrebbe.


 l'opzione -d non va come dovrebbe.
 
Non cambiare le carte in tavola.  La riga incriminata non è 
questa ma la echo che (ammetti tu stesso che te ne eri accorto) 
serviva per debug; non è una buona idea usare un comando non
sicuro in un messaggio per ili debug, rischi di non accorgerti
dell'errore che vuoi scoprire.Vero è che non sapevo se "date -d"
funzionava ma echo non serviva a scoprire questo.
 
 

 questo.
 
E chi ha mai pensato che servisse a questo?
Non m'è mai passato per l'anticamera del cervello che date -d avrebbe 
potuto non funzionare. E anche tu pensavi avrebbe funzionato, quando hai 
scritto lo script. Per quanto mi riguarda, un date che non ha il -d a me 
sembra fuori dal mondo: va bene il minimalismo, ma insomma...
 
Quello che pensavo è che avrebbe potuto esserci un errore umano 
nell'impostare T: per la serie voglio scrivere *50* giorni fa, e invece 
scrivo *5*... e magari lo script sembra funzionare benissimo, ma siccome 
il numero dei secondi dal 1970 ad oggi non mi dice niente, va a finire 
che magari cancello molto più di quel che vorrei. Invece se vedo bella 
bella la data di una settimana fa, vicino a un file da cancellare, magari 
mi squilla un campanone in testa, e ho un'occasione in più per fermarmi.
 
Oh, santa pazienza. Ci siamo chiariti ora?
Possiamo chiuderla qui?


 Oh, santa pazienza. Ci siamo chiariti ora?
 
Questo mi era chiaro. Però, a mio avviso, viene in un momento 
successivo, la prima cosa da controllare è il funzionamento dei 
ciclo e dei test.
 
Smooth & cool
 

 ancora. Ma la normalità è che l'opzione -d non c'é.
 
Ah, capisco. Grazie.
 
Per certe mie sciocchezzuole son così abituato a usare quest'opzione, che 
sono incorso nell'errore di pensare che fosse fondamentale e 
imprescindibile.
