从特定日期获取文件

时间:2014-06-28 18:13:37

标签: unix awk grep unix-timestamp ls

Unix的新手,我试图从具有当前日期的目录中获取文件。 尝试下面的命令,但它取而代之的是其他文件

cd /path/; ls -lrt abc833* | grep `date '+%d'`

此外,我想尝试类似下面的内容,但它不起作用

for file in /path/abc833*

if [ `$file | awk '{print $7}'` =`date '+%d'`];then

echo $file

fi
done

错误是什么?

3 个答案:

答案 0 :(得分:0)

为什么不使用find?

find ./ -ctime 1

返回过去24小时内创建的所有文件。你也忘了包裹日期:

cd /path/; ls -lrt abc833* | grep $(date '+%d')

%d仅给出今天的一天中的天数将是" 28"。这也符合" 20:28"或上个月的第28个。

编辑:

语法错误出现在您的第一篇文章中。您正确包装了日期命令。 您的第二种方法充满了语法错误。并且您正在尝试执行每个文件以将其输出传递给awk =>你忘记了ls -l

但同样的日期错误。 stat -c %Y <file>为您提供了自纪元以来几秒钟内文件的修改时间,这可能更容易计算。

答案 1 :(得分:0)

cd /path/; ls -lrt abc833* | sed 1d | tr -s ' '|cut -d' ' -f9|grep $(date '+%d')

答案 2 :(得分:0)

您可以在awk中执行所有逻辑:

ls -ltr | awk '{date=strftime("%d"); if($7==date){f="";for(i=9;i<=NF;i++){f=f" "$i} print f}}'

如果您的文件名不包含空格,则可以简化:

ls -ltr | awk '{date=strftime("%d"); if($7==date){print $9}}'

如果您要从ls -ltr

获取整行,而不是文件名
ls -ltr | awk '{date=strftime("%d"); if($7==date){print $0}}'