Você nem precisa de globbing estendido para fazer o que quiser. Isso funcionará no bash:
ls {day*,night*}
O conteúdo do meu diretório é
$ ls -lrt
total 0
-rw-r--r-- 1 user1 admin 19 Oct 8 12:31 night.txt
-rw-r--r-- 1 user1 admin 19 Oct 8 12:31 noon.txt
-rw-r--r-- 1 user1 admin 38 Oct 8 12:31 day.txt
Gostaria de listar detalhes de arquivos que tenham uma palavra no nome do arquivo, conforme especificado.
$ ls -lrt *day|night*
ls: *day: No such file or directory
bash: night.txt: command not found
-rw-r--r-- 1 user1 admin 19 Oct 8 12:31 night.txt
-rw-r--r-- 1 user1 admin 38 Oct 8 12:31 day.txt
Como listar arquivos diferentes que correspondem a 2 partterns diferentes ou, resumindo, como usar o regex com ls , para que eu possa OR das partes do nome do arquivo.
Scenarion original, há muitos arquivos no diretório, abreviou o caso para perguntar.
Não há nenhuma opção em ls para filtrar o nome do arquivo, mas na maioria dos shells existem extensões de globbing man bash /Pattern Matching
ksh
ls -lrtd -- *@(day|night)*
zsh
setopt extendedglob
ls -lrtd -- *(day|night)*
ou:
setopt kshglob
ls -lrtd -- *@(day|night)*
bash
shopt -s extglob
ls -lrtd -- *@(day|night)*
Em qualquer um desses três shells você pode fazer isso, mas observe que se um dos casos não corresponder a nenhum arquivo, esse padrão será deixado não expandido (por exemplo, *day* night1.txt othernight.txt se não houver nenhum nome de arquivo contendo day ; veja man bash /EXPANSION ou /Brace Expansion especificamente):
ls -lrtd -- *{day,night}*
Em qualquer projétil, você pode fazer:
ls -lrtd -- *day* *night*
No zsh, se houver nenhum arquivo day ou night , os dois últimos comandos falharão; defina a opção nonomatch ou csh_null_glob ou adicione (N) após cada padrão para evitar isso.
Shells não usam expressões regulares para expansão de argumentos.
Você pode ativar a correspondência estendida de padrões por
$ shopt -s extglob
e depois
$ ls @(day|night).txt
day.txt night.txt
Veja, por exemplo, o Manual de Referência do Bash (Correspondência de Padrões)