2009-08-14 2 views
0

Необходимо получить файлы между двумя заданными датами с помощью скрипта KornShell (ksh). Если в один день есть несколько файлов, получите последние файлы для этого дня.Скрипт KornShell для получения файлов между двумя датами

+0

Что вы имеете в виду две даты? Являются ли даты частью имени файла или вам нужно получить файлы на основе их времени доступа, времени создания? –

ответ

1

Я не пробовал, но есть a mailing list post об обнаружении файлов между двумя датами. Соответствующая часть:

Touch 2 файлов, start_date и stop_date, как это: $ сенсорный -t +200603290000,00 start_date $ сенсорный -t 200603290030,00 stop_date

Ok, start_date является 03/29/06 полночь, stop_date - 03/29/06 Спустя 30 минут после полночь. Возможно, вы захотите сделать ls -al для проверки.

Чтобы найти, вы можете найти -newer и , тогда! -ново, вот так: $ find/dir -newer start_date! -newer stop_date -print

Объедините это с ls -l, вы получите: $ find/dir -newer start_date! -newer stop_date -print0 | xargs -0 Ls -l

(Или вы можете попробовать выполнить -exec Ls -l. Я не уверен в формате, так что вы должны гадость вокруг немного)

0

в Баш shell, просто пример, вы можете использовать -nt test operator (оболочка korn поставляется вместе с ней, если я не ошибаюсь).

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

В скорлупе ореха для 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