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