当regex与目录中的任何文件都不匹配时,Shell会返回所有文件吗?

时间:2014-09-10 14:20:35

标签: regex shell unix sh solaris

我在shell文件中使用下面的命令,并在正则表达式匹配的目录中正常工作。 问题是,它列出了正则表达式不匹配时的所有文件。任何人都知道为什么会出现这种情况? 反正有没有避免它?

find  . -type f -mtime +365 | egrep '.*xxx.yyy*.*'|grep -v "[^.]/" | xargs ls -lrt | tr -s " " | cut -d" " -f6-9
谢谢你的时间。 注意:我在solaris 8上使用此脚本和splunk转发器。

1 个答案:

答案 0 :(得分:2)

如果xargs的输入为空,则它将在当前文件夹中执行ls -lrt

请尝试使用xargs -i "{}" ls -lrt "{}"。这迫使xargs将输入参数放入其执行的命令中的某个位置。如果它没有任何输入,它就不能完全跳过命令。

如果你有GNU xargs,你可以改用开关--no-run-if-empty

如果这不起作用,请尝试将所有grep移至find,以便您可以使用-ls来显示文件列表。如果没有文件匹配,这也将避免运行ls命令。