Die Dateien eines Monats oder Jahres aus einem grösseren Verzeichnis oder Verzeichnisbaum rausfiltern? Mit find kein Problem:
#!/bin/bash date_start="201101010000.00"; date_end="201112312359.59"; range_start="/tmp/range_start"; range_end="/tmp/range_end"; logfile="/tmp/oldfiles.log"; start_dir="/home/user/Downloads"; # set range start marker if [ -f $range_start ]; then rm -f $range_start; fi touch -t $date_start $range_start; # set range end marker if [ -f $range_end ]; then rm -f $range_end; fi touch -t $date_end $range_end; # delete old logfile if [ -f $logfile ]; then rm -f $logfile; fi # find all files in time range date_start:date_end and write their infos to logfile find $start_dir -type f -newer $range_start ! -newer $range_end -print0 | xargs -0 ls -al > $logfile # xargs is faster but may have problems with some dirnames - so here thr exec way find $start_dir -type f -newer $range_start ! -newer $range_end -exec ls -al {}\; > $logfile
Falls mehrere Instanzen zum Einsatz kommen könnten, kann man auch noch mit einem pidfile arbeiten, um das Überschreiben der Range-Marker zu verhindern.
Find kann die Liste auch selber ausgeben find …. -ls, in diesem Fall wird wegen der Datumsdarstellung das Umleiten durch ls -al bevorzugt (geplante Weiterverarbeitung mit awk).
Die ganze Geschichte als Einzeiler (mit find option ls) und der Begrenzung auf eine Verzeichnisebene:
touch -t 201201010000.00 /tmp/range_start && touch -t 201212312359.59 /tmp/range_end && find /home/user/Downloads -maxdepth 1 -type f -newer /tmp/range_start ! -newer /tmp/range_end -ls > /tmp/oldfiles.log
(Aus Layoutgründen wurde die vorhergehende lange Zeile nicht in monospace gesetzt.)
Hier ein Teil der Weiterverarbeitung: Ermitteln der Grösse (in der 5. Spalte steht bei ls -al die Dateigrösse).
awk 'BEGIN{sum=0;}{sum+=$5;}END{print sum;}' /tmp/oldfiles.log