我编写了一个脚本来将请求日志保存到其各个文件中。随着时间的推移,文件夹中的文件数量似乎增加了很多。现在我需要访问某个时间范围的一些日志,但我根本无法做到这一点。
日志文件名格式如下:2016-02-11_124805_4269_170784456256bc8305a7e8b1455194885_req.xml
到目前为止我已经尝试过
ls
tar -cvzf 2016-02-20.tar.gz 2016-02-20*.xml
压缩文件cat 2016-02-20_01* | grep -nr "text_to_search"
ls -lah >> ../list.log
find ./dirname -type f >> list2.log
以及一个用于搜索的脚本
for each_file in ./dirname/* do echo ls -lah $each_file >> ./dirname_file.log done
和tar
返回cat
,arguments list too long
其他人还没有给我回应。
任何帮助表示赞赏。
答案1
find ./dirname -type f -name "2016-02-20_01*"
可能会起作用,尽管它仍然可能不会很快。
然后你可以这样做,
find ./dirname -type f -name "2016-02-20_01*" -print | xargs grep -n "text_to_search"
答案2
对于“ls”,我的印象是缓慢主要是由排序引起的。
'ls -f' 将禁用排序,根据我的经验(几年前我运行 nntp 服务器时使用 ext3 和 xfs),工作速度要快得多。
答案3
尝试这个:
perl -le 'opendir $d,".";while($f=readdir($d)){print $f if $f =~ /^2016-02-20_01/}'
这会直接读取目录条目,并且不会尝试对它们执行任何操作。如果您想实际查看文件的内容,可以使用:
perl -le 'opendir $d,".";while($f=readdir($d)){if($f =~ /^2016-02-20_01/){print "=== $f ===";open(my $i,"<",$f);while(<$i>){print};close($i)}}'
编辑:澄清一下,这假设您已经进入该目录。 (点指的是当前目录)。否则,替换“.”与目录路径。