Відповіді:
Використовуйте для цього фігурні брекети:
ls /opt/somedir/{aa,bb,cc}
Для отримання додаткової інформації читайте про розширення дужок .
Під bash запустіть shopt -s extglob
(або помістіть його у свій ~/.bashrc
), і ви можете використовувати додаткові шаблони, що надають регулярні вирази з незвичайним синтаксисом (успадкованим від ksh). Ви можете використовувати ці зразки і в ksh, звичайно, а також у zsh після setopt ksh_glob
.
$ shopt -s extglob
$ ls /opt/somedir/@(aa|bb|cc|doesnotexist)
/opt/somedir/aa /opt/somedir/bb /opt/somedir/cc
У zsh ви можете безпосередньо використовувати (foo|bar)
як візерунок.
% ls /opt/somedir/(aa|bb|cc|doesnotexist)
/opt/somedir/aa /opt/somedir/bb /opt/somedir/cc
Зауважте, що команда викликається повним шляхом. Якщо ви хочете викликати команду коротким шляхом, вам потрібно буде якось змінити каталог, і (cd /opt/somedir && somecommand aa bb cc)
це, безумовно, найпростіший спосіб.
Ви можете фільтрувати, використовуючи egrep
:
ls | egrep '(aa|bb|cc)'
Щоб знайти всі текстові файли:
ls | egrep '(aa|bb|cc).txt'
По-перше, я скеровую вас на: ніколи не розбирайте лс , ніколи . Правильний і канонічний спосіб робити те, що ви хочете, - знайдіть .
Наприклад:
find /opt/somedir -regex '.*[aa|bb|cc].*' -exec mv '{}' ~/backup \;
Я зазвичай використовую -name
замість того, -regex
як це простіше. Але регулярний випадок відповідає вашому випадку використання. Ви повинні виконати команду без -exec
першого разу, щоб переконатися, що вони насправді є файлами, які ви хочете перемістити / видалити.