0

需要通过 KornShell (ksh) 脚本获取两个给定日期之间的文件。如果一天有多个文件,请获取当天的最新文件。

4

3 回答 3

1

我还没有尝试过,但是有一个关于在两个日期之间查找文件的邮件列表帖子。相关部分:

触摸 2 个文件,start_date 和 stop_date,如下所示: $ touch -t 200603290000.00 start_date $ touch -t 200603290030.00 stop_date

好的,start_date 是 03/29/06 午夜,stop_date 是 03/29/06 午夜后 30 分钟。你可能想做一个 ls -al 来检查。

上去查找,可以找到-newer 然后!-newer,像这样: $ find /dir -newer start_date !-较新的停止日期-打印

将其与 ls -l 结合,您将得到: $ find /dir -newer start_date !-较新的停止日期-print0 | xargs -0 ls -l

(或者你可以尝试 -exec 执行 ls -l。我不确定格式,所以你必须稍微弄乱一下)

于 2009-08-14T02:30:39.870 回答
0

在 bash shell 中,只是一个示例,您可以使用 -nt 测试运算符(如果我没记错的话,korn shell 也附带它)。

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
于 2009-08-14T03:26:13.127 回答
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
于 2014-11-11T15:35:56.490 回答