我想为日期过滤一些文件(我无法使用find,因为这些文件位于HDFS中)。我发现的解决方案是使用awk。
这是我要处理的数据示例
drwxrwx--x+ - hive hive 0 2019-01-01 20:02 /dat1
drwxrwx--x+ - hive hive 0 2019-01-02 16:38 /dat2
drwxrwx--x+ - hive hive 0 2019-01-03 16:59 /dat3
如果我使用此命令:
$ ls -l |awk '$6 > "2019-01-02"'
drwxrwx--x+ - hive hive 0 2019-01-03 16:59 /dat3
我没有任何问题,但是如果我想在2天前创建一个脚本来帮助我进行过滤,请在awk中添加以下表达式:
$ date +%Y-%m-%d --date='-2 day'
2019-01-02
类似这样,但是不起作用:
ls -l |awk '$6 >" date +%Y-%m-%d --date=\'-2 day\'"'
>
好像缺少了一些东西,但我不知道它是什么。
答案 0 :(得分:0)
首先,Never try to parse the output of ls
。
如果您想使用目录n
中最长/path/to/dir/
天的文件/目录
$ find /path/to/dir -type f -mtime -2 -print
$ find /path/to/dir -type d -mtime -2 -print
第一个用于文件,第二个用于目录。
如果您仍然想用awk
解析ls,则可以尝试以下操作:
$ ls -l | awk -v d=$(date -d "2 days ago" "+%F") '$6 > d'
您遇到的问题是将双引号嵌套到单引号中。
答案 1 :(得分:0)
通常不建议解析ls的输出并操纵文件的mod-time。但是,如果您坚持使用yyyymmdd格式,则以下变通办法将为您提供帮助。我将这种技巧用于日常琐事,因为它使用数字比较
$ ls -l --time-style '+%Y%m%d' delete_5lines.txt jobinfo.txt stan.in sample.dat report.txt
-rw-r--r-- 1 user1234 unixgrp 34 20181231 delete_5lines.txt
-rw-r--r-- 1 user1234 unixgrp 226 20190101 jobinfo.txt
-rw-r--r-- 1 user1234 unixgrp 7120 20190104 report.txt
-rw-r--r-- 1 user1234 unixgrp 70555 20190104 sample.dat
-rw-r--r-- 1 user1234 unixgrp 58 20190103 stan.in
在1月3日之后获取文件
$ ls -l --time-style '+%Y%m%d' delete_5lines.txt jobinfo.txt stan.in sample.dat report.txt | awk ' $6>20190103'
-rw-r--r-- 1 user1234 unixgrp 7120 20190104 report.txt
-rw-r--r-- 1 user1234 unixgrp 70555 20190104 sample.dat
在1月3日当天或之后获取文件。
$ ls -l --time-style '+%Y%m%d' delete_5lines.txt jobinfo.txt stan.in sample.dat report.txt | awk ' $6>=20190103'
-rw-r--r-- 1 user1234 unixgrp 7120 20190104 report.txt
-rw-r--r-- 1 user1234 unixgrp 70555 20190104 sample.dat
-rw-r--r-- 1 user1234 unixgrp 58 20190103 stan.in
恰好是1月3日
$ ls -l --time-style '+%Y%m%d' delete_5lines.txt jobinfo.txt stan.in sample.dat report.txt | awk ' $6==20190103'
-rw-r--r-- 1 user1234 unixgrp 58 20190103 stan.in
您可以给它起别名
$ alias lsdt=" ls -l --time-style '+%Y%m%d' "
并像使用它
$ lsdt jobinfo.txt stan.in sample.dat report.txt
注意:同样,如果要在脚本中使用它,则应避免使用它...只需将其用于日常琐事