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 os detalhes dos arquivos que têm uma palavra no nome do arquivo, conforme especificado.
Exemplo:
$ ls -lrt *day|night*
ls: *day: No such file or directory
bash: night.txt: command not found
Saída esperada
-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 partes diferentes ou, em suma, como usar regex com ls
, para que eu pudesse OR
as partes do nome do arquivo.
Cenário original, existem muitos arquivos no diretório, abreviaram o caso para perguntar.
touch day.txt; touch night.txt; ls {*day,night*}
resultados emls: *day: No such file or directory
*{day,night}*
está mais perto do que o OP quer.Não há opção
ls
para filtrar o nome do arquivo, mas na maioria das conchas existem extensões brilhantesman bash
/Pattern Matching
ksh
zsh
ou:
bater
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 sem expansão (por exemplo,
*day* night1.txt othernight.txt
se não houver um nome de arquivo contendoday
; vejaman bash
/EXPANSION
ou/Brace Expansion
especificamente):De qualquer forma, você pode fazer:
Em zsh, se há ou não há
day
ounight
arquivo, os dois últimos comandos irá falhar; definir ononomatch
oucsh_null_glob
opção, ou adicionar(N)
após cada padrão para evitar isso.fonte
*{day,night}*
. Eu o editaria, mas não sei quais conchas o suportam?bash
,ksh
ezsh
(nenhuma necessidade estendida englobamento), mas nãosh
- no entanto, de Nahuel últimos "todas as conchas" exemplo funciona nosh
.Os shells não usam expressões regulares para expansão de argumentos.
Você pode ativar a correspondência estendida de padrões
e depois
Veja, por exemplo, o Manual de Referência do Bash (Correspondência de Padrões)
fonte