一旦我触摸一个新文件,我的 ls 命令和 grep 就会停止工作

一旦我触摸一个新文件,我的 ls 命令和 grep 就会停止工作

我正在尝试查找我的主目录中具有特定扩展名的所有文件。如果我只有一个文件扩展名实例,则 ls 命令工作得很好,但是一旦我触摸具有相同扩展名的新文件,ls 命令就不会返回任何内容。

我真的不确定发生了什么事,如果有人可以帮助我指出正确的方向,那就太好了。

在此输入图像描述

答案1

始终用单引号引用正则表达式,因为 shell 将通配符扩展到文件。

所以:

ls -1 | grep '\.java$'

删除了不必要的通配符。

但解析ls输出不是一个好主意,我建议find

find . -name '*.java'

递归搜索,或者

find . ! -name . -prune -name '*.java'

或者与 GNUfind或兼容:

find . -name '*.java' -mindepth 1 -maxdepth 1

仅搜索当前目录。

在这种特殊情况下,由于深度 0 的唯一文件.(我们指示开始查找文件的当前工作目录find)与模式不匹配*.java,因此您可以省略-mindepth 1.

相关内容