【发布时间】:2010-11-19 12:41:23
【问题描述】:
需要通过 KornShell (ksh) 脚本获取两个给定日期之间的文件。如果一天有多个文件,请获取当天的最新文件。
【问题讨论】:
-
两次约会是什么意思?日期是文件名的一部分,还是您需要根据文件的访问时间、创建时间来获取文件?
标签: shell scripting file date ksh
需要通过 KornShell (ksh) 脚本获取两个给定日期之间的文件。如果一天有多个文件,请获取当天的最新文件。
【问题讨论】:
标签: shell scripting file date ksh
我还没有尝试过,但是有 a mailing list post 关于在两个日期之间查找文件的信息。相关部分:
触摸 2 个文件,start_date 和 stop_date,像这样:$ touch -t 200603290000.00 start_date $ touch -t 200603290030.00 stop_date
好的,开始日期是 06 年 3 月 29 日午夜, stop_date 是 06 年 3 月 29 日 30 分钟后 午夜。你可能想做一个 ls -al 来检查。
在查找时,您可以找到 -newer 和 然后 ! -较新,像这样:$ find /dir -较新的开始日期! -newer stop_date -print
把它和 ls -l 结合起来,你会得到:$ 找到 /dir -newer start_date ! -较新 停止日期-print0 | xargs -0 ls -l
(或者你可以试试 -exec 执行 ls -l。我不确定格式,所以你必须稍微弄乱一下)
【讨论】:
在 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
【讨论】:
简而言之 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
【讨论】: