我希望有一个单行命令来查找递归文件,并能够通过文件结尾排除几种文件类型。
这是我想出来的,它是有效的。
find "$path" -type f ( ! -iname "*.txt" ! -iname ".*" ! -iname "*.swf" )
但我的问题是:
- 如果我想排除更多的文件,命令会变得很长。
- 我更愿意有选项将所有排除的文件结尾放在一个变量中,以具有类似于此
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)$)'