可以在 bash 中按给定日期对进程进行排序吗?

It is possible to sort the proccesses by a given date in bash?

我要做的就是按输入日期对流程进行排序。 这是我保存日期的方式:

#!/bin/bash
echo "Insert the date yyyy-mm-dd"
read a
if ! [[ $date =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]
then echo "Date is not valid"
elif b=`date --date=$a '+%Y-%m-%d'`
then 
????
fi

如何显示这个日期的进程?谢谢

您可以指定格式化程序并使用 lstart,就像这样的命令:

ps -eo lstart,pid,cmd

以上命令将输出所有进程,格式化程序获取日期+时间、PID 启动和命令运行,但我已将日期格式更改为与您的日期输入对齐

这就是您要找的东西:

#!/bin/bash
declare -A MONTHS
#months Dictionary

MONTHS[01]=Jan
MONTHS[02]=Feb
MONTHS[03]=Mar
MONTHS[04]=Apr
MONTHS[05]=May
MONTHS[06]=Jun
MONTHS[07]=Jul
MONTHS[08]=Aug
MONTHS[09]=Sep
MONTHS[10]=Oct
MONTHS[11]=Nov
MONTHS[12]=Dec

echo "Insert the date yyyy-mm-dd"
IFS="-" read -a val

if [[ "${val[0]}-${val[1]}-${val[2]}" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]
then
    echo "Date is valid!!"
    ps -eo lstart,pid,cmd --sort=start_time | \
    awk {'print  "-"  "-"  " "  " " '} | \
    grep "${val[0]}-${MONTHS[${val[1]}]}-${val[2]}"

else
    echo "Date is not valid"
fi

输出样本:

2020-May-19 23 [crypto]
2020-May-19 230 [scsi_tmf_27]
2020-May-19 231 [scsi_eh_28]
2020-May-19 232 [scsi_tmf_28]
2020-May-19 233 [scsi_eh_29]
2020-May-19 234 [scsi_tmf_29]
2020-May-19 235 [scsi_eh_30]
2020-May-19 236 [scsi_tmf_30]
2020-May-19 237 [scsi_eh_31]
2020-May-19 238 [scsi_tmf_31]
2020-May-19 239 [scsi_eh_32]
2020-May-19 2390 /usr/lib/deja-dup/deja-dup-monitor