我试图用命令查找文档名称“*.{py,html}”来获得目录中所有python和html文件的列表。

然后出现了手册页:

模式('{}')中的大括号不被认为是特殊的(即find。name 'foo{1,2}'匹配一个名为foo{1,2}的文件,而不是文件foo1和foo2。

由于这是管道链的一部分,我希望能够在运行时指定它匹配的扩展(不硬编码)。如果find不能做到这一点,perl一行程序(或类似程序)就可以了。

编辑:我最终想出的答案包括各种各样的废话,而且也有点长,所以我把它作为我最初试图解决的问题的答案。如果你有更好的解决方案,请随意修改。


当前回答

这适用于AIX korn shell。

find *.cbl *.dms -prune -type f -mtime -1

这是在寻找*。CBL或*。1天前的DMS,只在当前目录中,跳过子目录。

其他回答

find MyDir -iname "*.[j][p][g]"
+
find MyDir -iname "*.[b][m][p]"
=
find MyDir -iname "*.[jb][pm][gp]"

我也有类似的需求。这招对我很管用:

find ../../ \( -iname 'tmp' -o -iname 'vendor' \) -prune -o \( -iname '*.*rb' -o -iname '*.rjs' \) -print

我需要删除子dirs中的所有文件,除了一些文件。下面的模式对我很有用(指定了三种模式):

find . -depth -type f -not -name *.itp -and -not -name *ane.gro -and -not -name *.top -exec rm '{}' +

对于带或的命名模式,需要在模式\(\)内使用大括号

find Documents -type f \( -name "*.py" -or -name "*.html" \)

而对于带有and操作符的名称模式,则不是必需的

find Documents -type f ! -name "*.py" -and ! -name "*.html" 

我的默认情况是:

查找-type f | egrep -i "*.java|*.css|*.cs|*.sql"

就像Brendan Long和Stephan202等人提出的不那么注重过程的发现执行:

查找文件\(name "*.py" -或name "*.html" \)