我需要在unix find命令中使用unix正则表达式:
找到“/ home / user / somePath /” - maxdepth 1! -regex “/ home / user / somePath / someUnwantedPath”! -regex “/ home / user中/ somePath / someMoreUnwantedPath”
这有效,但我需要将正则表达式优化为单个,因为不需要的路径不仅仅是少数。
答案 0 :(得分:1)
我想你可以通过轮换来做到这一点。
/home/user/somePath/(someUnwantedPath|someMoreUnwantedPath)
find" / home / user / somePath /" -maxdepth 1! -regex" / home / user / somePath /(someUnwantedPath | someMoreUnwantedPath)"
只需在括号内组的末尾添加更多路径,以新的|
作为交替分隔符开头。即|AnotherUnwantedPath
。
修改强>
我是" Windows dude",所以我 熟悉Unix,但我想在BUW上试用它你必须逃避正则表达式元字符。所以我想正确的答案应该是
/home/user/somePath/\(someUnwantedPath\|someMoreUnwantedPath\)/.*
find" / home / user / somePath /" -maxdepth 1! -regex" / home / user / somePath / \(someUnwantedPath \ | someMoreUnwantedPath \)/.*"
答案 1 :(得分:0)
您可以使用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