如何列出目录中除具有指定扩展名的文件之外的所有文件?

如何列出目录中除具有指定扩展名的文件之外的所有文件?

假设我有一个文件夹包含。TXT,.pdf,以及其他文件。我想列出“其他”文件(即没有扩展名的文件。TXT或者.pdf)。您对如何执行此操作有什么建议吗?

我知道如何列出没有给定扩展名的文件。例如,如果我想列出除。TXT文件,然后

find -not -iname "*.txt"

或者

ls | grep -v '\.txt$' | column

似乎有效。但是,我怎样才能列出除。TXT文件或者 .pdf文件?看来我需要在findor中使用某种逻辑“或” grep

答案1

假设有 GNU ls,这可能是最简单的方法:

ls -I "*.txt" -I "*.pdf"

如果你想遍历所有子目录:

ls -I "*.txt" -I "*.pdf" -R

答案2

寻找支持-o

find . ! '(' -name '*.txt' -o -name '*.pdf' ')'

您需要括号来确保优先级正确。 Find 可以做很多事情;我建议阅读它的联机帮助页。

你也可以做一个 or in grep(但实际上,你不应该解析输出ls

ls | grep -Ev '\.(txt|pdf)$' | column

答案3

通过bash扩展的通配符(使用 打开shopt -s extglob),通配符!(*.txt|*.pdf)应该可以工作。您可以将此 glob 直接传递给任何采用文件参数的命令,包括但不限于ls.

答案4

find /path/to/directory '!' -name '*.pdf' '!' -name '*.txt'

这相当于带有 OR 运算符的命令,因为德摩根定律

相关内容