Pod bash uruchom shopt -s extglob
(lub umieść go w swoim ~/.bashrc
), i możesz użyć dodatkowych wzorców, które zapewniają wyrażenia regularne o nietypowej składni (dziedziczone z ksh). Oczywiście możesz używać tych wzorów także w ksh, a także w zsh później setopt ksh_glob
.
$ shopt -s extglob
$ ls /opt/somedir/@(aa|bb|cc|doesnotexist)
/opt/somedir/aa /opt/somedir/bb /opt/somedir/cc
W Zsh możesz bezpośrednio użyć (foo|bar)
jako wzorca.
% ls /opt/somedir/(aa|bb|cc|doesnotexist)
/opt/somedir/aa /opt/somedir/bb /opt/somedir/cc
Zauważ, że polecenie jest wywoływane z pełną ścieżką. Jeśli chcesz wywołać polecenie krótką ścieżką, musisz jakoś zmienić katalog i (cd /opt/somedir && somecommand aa bb cc)
jest to zdecydowanie najłatwiejszy sposób.
Gilles „SO- przestań być zły”
źródło
Możesz filtrować za pomocą
egrep
:Aby znaleźć wszystkie pliki tekstowe:
źródło
Po pierwsze, kieruję cię do: nigdy nie parsuj ls , nigdy . Właściwym i kanonicznym sposobem robienia tego, co chcesz, jest znalezienie .
Na przykład:
Zwykle używam
-name
zamiast,-regex
ponieważ jest to prostsze. Ale wyrażenie regularne pasuje do Twojego przypadku użycia. Powinieneś uruchomić polecenie bez-exec
pierwszego uruchomienia, aby upewnić się, że faktycznie są to pliki, które chcesz przenieść / usunąć.źródło