1

現在のフォルダーにはサブフォルダーが含まれており、それぞれに処理したいファイルが含まれています。

興味のあるファイルは次のようになります。

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

なだ。

4

2 に答える 2

1

使用find:

find . -path "./someSubFolderCommonPathName*/*commonStringInFileName*" ! -name "*_stringNotToMatch" -exec stat {} \;
于 2013-04-30T09:40:27.957 に答える
1

負の拡張グロブ パターンは少し問題があります。状況を少し単純化しましょう:が必要ですが、最後*nice*には必要ありませんugly。入れば

*nice*!(ugly)

を含むすべてniceが一致します。負のパターンの前のアスタリスクuも同様に食べglyられ、最後のアスタリスクはもう醜くありません。また、 で終わる文字列はnice一致しません。

回避するには、アスタリスクを負のパターンに移動します。

*nice!(*ugly)
于 2013-04-30T09:33:48.073 に答える