我正在尝试搜索六月、七月和八月创建的文件。我用了这个方法
ls -lrth|awk '/[Jun][Jul][Aug]/ {print}'
但它不起作用。
答案1
您可以匹配多种模式,如下所示:
awk '/Jun/ || /July/ || /Aug/' <(ls -lrh)
这将返回 Jun、July 或 Aug 的所有匹配项。您不需要该print
语句,因为这是awk
默认操作。
答案2
一般来说,这是一个非常糟糕的主意解析ls的输出。做你想做的事的更好方法是
stat -c "%n %y" * | grep 2013-0[678]
或者,仅检查最后一个字段,以防止出现文件名本身是日期的情况:
stat -c "%n %y" *| awk '$NF ~ /2013-0[678]/'
从man stat
:
-c --format=FORMAT
use the specified FORMAT instead of the default; output a new‐
line after each use of FORMAT
%y time of last modification, human-readable
%n file name
答案3
ls
是以人类可读的方式显示有关文件的信息的命令。不要在脚本中使用它。
在目录树中查找符合特定条件的文件的命令是find
。如果您有 GNU find(即非嵌入式 Linux 或 Cygwin)或 FreeBSD find(即 FreeBSD 或 OSX),则可以用来-newermt
匹配在特定日期之后最后修改的文件。
find . -newermt '1 June' ! -newermt '1 September' -print
如果您想要匹配特定年份而不是脚本运行时的日历年份的文件,请添加年份。
如果您的查找实现没有-newermt
,则必须使用-newer
,它将找到的文件的日期find
与固定文件进行比较。用于touch
创建以要使用的日期为边界的临时文件。
dir=$(mktemp -d)
touch -d 201306010000 "$dir/from"
touch -d 201309010000 "$dir/to"
find . -newer "$dir/from" ! -newer "$dir/to" -print
rm -r "$dir"