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
错误是什么?
答案 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}}'