它有效,但它太长了,我甚至有更多的目录(不同的数字)我想排除。是否有可能缩短它?
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/*"
答案 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)