Powiedzmy, że mam katalog z plikami a1, a2, a3, b1, b2, b3. Chcę tylko dopasować pliki, które zaczynają się od, a
ale nie zawierają 3
. Próbowałem, ls -I "*3" *a*
ale powraca a1 a2 a3
, chociaż nie chcę, żeby pasowało a3
. Czy to jest możliwe ls
?
12
do not list implied entries matching shell PATTERN
jednak nie wyjaśnia, co należy rozumieć pod pojęciem domyślnym , ale domyślam się, że dotyczy to tylko plików, którels
uzyskują rozszerzenia globalne - ils
nie rozwijaa*
, powłoka robi to .Odpowiedzi:
Właśnie:
shopt -s extglob
aktywuje rozszerzone globowanie.a
pasuje do początkua
!()
neguje dopasowanie wewnątrz()
...*3*
który jest3
i cokolwiek przed nim lub po nim.źródło
set -s extglob
Istniejące odpowiedzi dobrze określają najlepszy sposób, aby to zrobić za pomocą globów; Dołączę to, ponieważ w większości przypadków
find
jest lepszą opcją, jeśli chcesz wykonać skrypty lub dalsze przetwarzanie:Możesz podać odpowiedź do
xargs
łatwych działań lub dowhile read
pętli dla bardziej skomplikowanych rzeczy.źródło
Łatwy sposób to
a*
3
Komenda UNIX to
ls -1
pokazuje jeden plik w linii.grep
zwykle znajduje linie, które pasują do wzorca, ale przy-v
takim zachowaniu jest odwrócone, tzn. grep znajduje linię, która nie pasuje do tego wzorca.źródło
ls
nie jest pomysł Goob: mywiki.wooledge.org/ParsingLsZa
zsh
pomocą~
operatora glob :Dzięki
gnu
ls
możesz skorzystać z dwóch--ignore
opcji:pierwszy ignoruje wszystkie nazwy plików, które nie zaczynają się od,
a
a drugi ignoruje nazwy plików, które zawierają3
źródło