当前文件夹包含子文件夹,每个子文件夹都包含我要处理的文件。
我感兴趣的文件如下所示:
someSubFolderCommonPathName*/*commonStringInFileName*
我的问题是我也有一些我不想处理的文件,其名称与上述相同并且以_stringNotToMatch
:
someSubFolderCommonPathName*/*commonStringInFileName*_stringNotToMatch
如何在我的模式匹配表达式中排除它们?
一个简单的例子可能是:
for i in someSubFolderCommonPathName*/*commonStringInFileName*!(stringNotToMatch); do stat $i; done
...但它不起作用。
好的,如果我进一步简化这一点,这里有一个例子:我有以下内容:
me@my-laptop:~/a$ ls -R
.:
aPrettyBoy aPrettyGirl
./aPrettyBoy:
12cool21 12nice21 77nice77_ugly
./aPrettyGirl:
12cool21 12nice21 23nice23_ugly
然后我尝试显示所有包含nice
在其名称中的文件,而不是_ugly
:
me@my-laptop:~/a$ for i in *Pretty*/*nice*!(_ugly); do echo $i; done
aPrettyBoy/12nice21
aPrettyBoy/77nice77_ugly
aPrettyGirl/12nice21
aPrettyGirl/23nice23_ugly
它没有用。我现在将包括一颗星:
me@my-laptop:~/a$ for i in *Pretty*/*nice*!(*_ugly); do echo $i; done
aPrettyBoy/12nice21
aPrettyBoy/77nice77_ugly
aPrettyGirl/12nice21
aPrettyGirl/23nice23_ugly
还是行不通。现在有了find
:
me@my-laptop:~/a$ find . -path "*Pretty*/*nice*" ! -name "_ugly" -exec echo {} \;
./aPrettyBoy/12nice21
./aPrettyBoy/77nice77_ugly
./aPrettyGirl/23nice23_ugly
./aPrettyGirl/12nice21
纳达。