Текущая папка содержит вложенные папки, каждая из которых содержит среди других файл, который я хочу обработать.Соответствие шаблону: исключить заданную строку
Файлы Я заинтересован в выглядеть:
someSubFolderCommonPathName*/*commonStringInFileName*
Моя проблема заключается в том, что у меня есть файлы, которые я сделать не хотите обработать чье имя такое же, как и выше, и которые заканчиваются _stringNotToMatch
:
someSubFolderCommonPathName*/*commonStringInFileName*_stringNotToMatch
Как исключить их в моих выражениях картины?
Простой пример может быть:
for i in someSubFolderCommonPathName*/*commonStringInFileName*!(stringNotToMatch); do stat $i; done
... но она не работает.
Хорошо, если я furtherly упростить это, вот пример: У меня есть следующие:
[email protected]:~/a$ ls -R
.:
aPrettyBoy aPrettyGirl
./aPrettyBoy:
12cool21 12nice21 77nice77_ugly
./aPrettyGirl:
12cool21 12nice21 23nice23_ugly
И тогда я пытаюсь сделать показать все файлы, содержащие nice
в их именах, а не _ugly
:
[email protected]:~/a$ for i in *Pretty*/*nice*!(_ugly); do echo $i; done
aPrettyBoy/12nice21
aPrettyBoy/77nice77_ugly
aPrettyGirl/12nice21
aPrettyGirl/23nice23_ugly
Это не сработало. Сейчас я включу звезду:
[email protected]:~/a$ for i in *Pretty*/*nice*!(*_ugly); do echo $i; done
aPrettyBoy/12nice21
aPrettyBoy/77nice77_ugly
aPrettyGirl/12nice21
aPrettyGirl/23nice23_ugly
Все еще не работает. ТЕПЕРЬ С find
:
[email protected]:~/a$ find . -path "*Pretty*/*nice*" ! -name "_ugly" -exec echo {} \;
./aPrettyBoy/12nice21
./aPrettyBoy/77nice77_ugly
./aPrettyGirl/23nice23_ugly
./aPrettyGirl/12nice21
Нада.
В моем случае часть до и после 'nice' всегда меняется. Единственные константы «приятные» где-то посередине и «_ugly» в конце. Я пробовал с и без '*' внутри скобок, но я все еще получаю эти нежелательные файлы ... –
@RickyRobinson: Пожалуйста, покажите конкретный пример. – choroba
ОК, я добавил пример, основанный на вашем ответе. –