在find命令中排除目录的可能性是否更短?

时间:2018-04-02 10:39:06

标签: bash find

它有效,但它太长了,我甚至有更多的目录(不同的数字)我想排除。是否有可能缩短它?

find ./8*/dti_processed/dti_FA.nii.gz \
     -not -path "./86*/*" -not -path "./852/*" -not -path "./853/*" \
     -not -path "./854/*" -not -path "./855/*" -not -path "./856/*" \
     -not -path "./857/*" -not -path "./858/*" -not -path "./859/*"

2 个答案:

答案 0 :(得分:0)

您可以使用正则表达式来过滤您不想要的路径。 IE浏览器。您的示例命令可以写为:

find ./8*/dti_processed/dti_FA.nii.gz -regextype egrep -not -regex '^\./(86.?|85[2-9])/'

find使用的默认正则表达式类型为Emacs Regular Expressions-regextype标记将其更改为Egrep Regular Expressions

答案 1 :(得分:0)

使用括号表达式减少模式数量:

--

由于您使用的是find ./8*/dti_processed/dti_FA.nii.gz -not -path "./86*/*" -not -path "./85[2-9]/*" ,因此如果您无法轻松地将排除项缩减为短列表,则使用数组来保存bash的参数列表可能更为清晰。这与De Morgan's Law结合得非常好,{{3}}表示find

not A and not B and ... and not Z == not (A or B or ... or Z)