我需要在unix find命令中使用unix正则表达式:
找到 "/home/user/somePath/" -maxdepth 1 ! -regex "/home/user/somePath/someUnwantedPath" !-正则表达式 "/home/user/somePath/someMoreUnwantedPath">
这有效,但我需要将正则表达式优化为一个正则表达式,因为不需要的路径不仅仅是几个。
我想你可以交替进行
。/home/user/somePath/(someUnwantedPath|someMoreUnwantedPath)
找到 "/home/user/somePath/" -maxdepth 1 ! -regex "/home/user/somePath/(someUnwantedPath|someMoreUnwantedPath(">
只需在括号组末尾添加更多路径,以新|
作为交替分隔符开始。 即|AnotherUnwantedPath
.
编辑
我是一个"Windows花花公子",所以我对Unix不是很熟悉,但我想在BUW上尝试一下,看来你必须转义正则表达式元字符。所以我想正确的答案应该是
/home/user/somePath/(someUnwantedPath|someMoreUnwantedPath)/.*
找到 "/home/user/somePath/" -maxdepth 1 ! -regex "/home/user/somePath/\(someUnwantedPath\|someMoreUnwantedPath\(/.*">
您可以使用grep -v -f
而不是正则表达式来使其干净。备用 (|( 运算符在许多 unix 系统中不起作用。您的排除文件应列出要排除的所有文件(包括子目录,如果有的话(。
cat excl_files.txt
/home/user/somePath/someUnwantedPath1
/home/user/somePath/someUnwantedPath2
/home/user/somePath/someUnwantedPath3
..
/home/user/somePath/someUnwantedPathn
find "/home/user/somePath/" -maxdepth 1 | grep -v -f excl_files.txt