Odpowiedzi:
Użyj do tego nawiasów klamrowych:
ls /opt/somedir/{aa,bb,cc}
Aby uzyskać więcej informacji przeczytaj o rozszerzaniu nawiasów klamrowych .
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.
Możesz filtrować za pomocą egrep
:
ls | egrep '(aa|bb|cc)'
Aby znaleźć wszystkie pliki tekstowe:
ls | egrep '(aa|bb|cc).txt'
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:
find /opt/somedir -regex '.*[aa|bb|cc].*' -exec mv '{}' ~/backup \;
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ąć.