假设我有一个文件夹包含。TXT,.pdf,以及其他文件。我想列出“其他”文件(即没有扩展名的文件。TXT或者.pdf)。您对如何执行此操作有什么建议吗?
我知道如何列出没有给定扩展名的文件。例如,如果我想列出除。TXT文件,然后
find -not -iname "*.txt"
或者
ls | grep -v '\.txt$' | column
似乎有效。但是,我怎样才能列出除。TXT文件或者 .pdf文件?看来我需要在find
or中使用某种逻辑“或” 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 运算符的命令,因为德摩根定律。