查找文件并从posix shell的结果中排除几个文件结尾



我希望有一个单行命令来查找递归文件,并能够通过文件结尾排除几种文件类型。

这是我想出来的,它是有效的。

find "$path" -type f ( ! -iname "*.txt" ! -iname ".*" ! -iname "*.swf" )

但我的问题是:

  1. 如果我想排除更多的文件,命令会变得很长。
  2. 我更愿意有选项将所有排除的文件结尾放在一个变量中,以具有类似于此exclude="(*.txt|*.swf|.*)"; find "$path" -type f ( ! -iname "$exclude" )的东西(我知道此代码不起作用,但作为我试图得到的解释。)

就像上面说的,我不能找到一个短的单行命令,它是posix兼容的,能够找到递归文件,并能够排除文件的文件结束

我找到的最接近的解决方案是https://stackoverflow.com/a/22558474,但在这个解决方案中,一个文件用于存储要排除的文件。所以它不是单行命令。

提前感谢!

假设文件名中没有任何换行符,您可以将find的输出通过grep管道传输,以使用正则表达式过滤掉不需要的换行符:

find "$path" -type f | grep -Ev '(^.)|(.(txt|swf)$)'

相关内容

  • 没有找到相关文章

最新更新