我想找到以“~”或“pyc”结尾的所有文件(在当前目录和所有子目录中)。为此,我尝试了以下find
模式:
find . -name '*{~,pyc}'
find . -name '{*~,*.pyc}'
但两者都没有列出目录中存在的任何文件。为什么这些模式不起作用?怎样做才正确呢?
当使用ls
代替find
(不带引号)时,我得到了预期的结果(除了ls
只显示当前的目录而不是所有子目录)。
答案1
find . -type f \( -name "*~" -o -name "*pyc" \)
这将返回所有以或 ( -type f
) 结尾的文件 ( ) 。~
-o
pyc
答案2
如果你有 GNU find,使用正则表达式会容易得多,
find . -regextype posix-egrep -regex '.*(~|pyc)$'
PS 我猜你正在使用 shell 扩展和 find 吗?如果是这样,那是不可能的,请改用find . -name '*.pyc' -o -name '*~'
。
答案3
如果您追求紧凑性,请使用zsh
:
printf '%s\n' **/*(~|pyc)(.D)
(D
也适用于点文件,.
仅适用于常规文件)
如果您想使用外壳大括号扩展,则必须执行以下操作:
eval 'find . -type f ! \(' '! -name \*'{~,pyc} '\)'
shell 扩展为:
eval 'find . -type f ! \(' '! -name \*~' '! -name \*pyc' '\)'
然后要求 shell 评估此命令行:
find . -type f ! \( ! -name \*~ ! -name \*pyc \)