如何列出目录中的所有 ASCII 文件?

如何列出目录中的所有 ASCII 文件?

我想列出当前工作目录(主目录)中所有不带扩展名(.txt)的 ASCII 文件。我先ls在终端中输入命令,但我不知道应该在选项中输入什么,因为我想列出没有扩展名但只有名称的文件。我该怎么做?

答案1

运行以下命令:

find . -maxdepth 1 -type f ! -name "*.*" -exec grep -lvIP '[^[:ascii:]]' {} +
  • find是更强大的ls
  • . -maxdepth 1仅表示当前目录
  • -type f仅表示文件
  • ! -name "*.*"表示排除带有扩展名的文件
  • -exec grep...表示通过命令{} +过滤文件列表grep
  • -lvIP '[^[:ascii:]]'表示仅显示-l不包含-v任何非( ^)-ascii 字符且不包含二进制数据( )的文件。在模式中使用字符类需要-IPerl 语法。-P[:ascii:]

答案2

在 Linux 中,任何文件都可以包含任何内容。因此,名为 的文件a.txt可能包含 JPEG 图片,而名为 的文件firmware.bin可能包含 ASCII 文本。

如果您对文件的内容(包含“ASCII 文本”)以及文件的名称(.文件名中不包含)感兴趣,@vanadium 在另一个答案的评论中的建议可能会得到改进,如下所示:

find . -maxdepth 1 -type f ! -name "*.*" -exec file -0 {} \; | \
  grep -Pa "\0.*ASCII text.*$"

* 此命令正确执行不是ASCII text选择名称中包含“二进制”的文件。

要得到仅文件名列表匹配的,将管道添加| grep -Pao '^[^\0]*'到上面给出的命令的末尾。

答案3

可以通过以下方式实现find

find . -maxdepth 1 -type f ! -name "*.*"

请注意,这!意味着NOT,因此将删除任何包含的结果.

相关内容