2009-08-14 5 views
0

Sie müssen die Dateien zwischen zwei angegebenen Daten über ein KornShell (ksh) -Skript abrufen. Wenn an einem Tag mehrere Dateien vorhanden sind, rufen Sie die neuesten Dateien für diesen Tag ab.KornShell-Skript zum Abrufen von Dateien zwischen zwei Daten

+0

Was von zwei Daten bedeuten haben Sie? Sind die Daten Teil des Dateinamens oder müssen Sie die Dateien basierend auf ihrer Zugriffszeit und der Erstellungszeit abrufen? –

Antwort

1

Ich habe es nicht ausprobiert, aber es gibt a mailing list post über das Finden von Dateien zwischen zwei Daten. Der relevante Teil:

Touch 2 Dateien, start_date und stop_date, wie folgt aus: $ touch -t 200.603.290.000,00 start_date $ touch -t 200.603.290.030,00 stop_date

Ok, start_date 03/29/06 Mitternacht ist, stop_date ist 03/29/06 30 Minuten nach Mitternacht. Vielleicht möchten Sie eine ls -al zu überprüfen.

Auf zu finden, können Sie -newer und dann finden! -newer, so: $ find/dir -neues start_datum! -newer stop_date -print

Kombiniere das mit ls -l, du bekommst: $ finde/dir -newer start_date! -newer stop_datum -print0 | xargs -0 ls -l

(Sie können auch versuchen -exec ls -l auszuführen. Ich bin von dem Format nicht sicher, so dass Sie ein wenig vertrödeln haben)

0

in bash shell, nur ein Beispiel, du kannst den Testoperator -nt benutzen (Korn Shell kommt auch mit, wenn ich nicht falsch liege).

printf "Enter start date(YYYYMMDD):" 
read startdate 
printf "Enter end date(YYYYMMDD):" 
read enddate 
touch -t "${startdate}0000.00" sdummy 
touch -t "${enddate}0000.00" edummy 
for fi in * 
do 
    if [ $fi -nt "sdummy" -a ! $fi -nt "edummy" ] ;then 
     echo "-->" $fi  
    fi 
done 
0

In einer Nussschale für KSH:

!/usr/bin/ksh 
# main from_date to_date path 
# date format: YYMMDDhhmmss 
ls -l --time-style "+%y%m%d%H%M%S" $3 | awk '{ print $6 " " $7 }' | while read t n 
    do 
     if ((t > $1)) && ((t < $2)); then 
      echo $t $n 
     fi 
    done 
Verwandte Themen