Gostaria de listar todos os arquivos que correspondam a um determinado padrão e ignorar o caso.
Por exemplo, eu executo os seguintes comandos:
ls *abc*
Quero ver todos os arquivos que possuem "abc" como parte do nome do arquivo, ignorando o caso, como
-rw-r--r-- 1 mtk mtk 0 Sep 21 08:12 file1abc.txt
-rw-r--r-- 1 mtk mtk 0 Sep 21 08:12 file2ABC.txt
Nota
Eu procurei na página de manual por case, mas não encontrei nada.
shport -s nocaseglob
?shopt -s
; para desabilitar , você usashopt -u
. Alternativamente, você pode embrulhar tudo em um subshell usando( )
para que a configuração não afeta o shell pai:(shopt -s nocaseglob ; ls *abc*)
.[aA][bB][cC]
)?shopt
comando nos últimos 15 anos de uso do bash!Conforme explicado pelo polemon, é o shell (não o ls) que se estende
*abc*
a uma lista de arquivos. Isso é chamado de correspondência de padrões .Além de alterar todo o comportamento da correspondência de padrões para ignorar maiúsculas e minúsculas, você pode usar outra forma de correspondência de padrões que não a
*
. O seguinte faria o que você deseja no bash:Do bash man:
Isso permite uma correspondência de grão mais fino, onde você pode usar
*[aA][bB]c*
para combinarabc
ouABc
mas nãoabC
ouABC
. Ou um exemplo em francês, onde eu poderia querer corresponder a todas as instâncias doe
personagem:fonte
[...]
pode ser útil em muitos casos, e eu pensei que valia a pena mencionar.[[=e=][=E=]]
.Você também pode adicionar a
-i
opção (--ignore-case)grep
para obter e a saída abaixo.fonte
Eu não acho que isso seja possível com ls, mas você poderia usar o find:
fonte
use o seguinte código:
fonte
Você pode fazer o GREP do arquivo usando o
-i
que adiciona a opção insensível.Por exemplo, para encontrar os dois
abc
eABC
você pode executar este comandofonte
-i
opção em nenhum lugar do seu comando.ls
?No tcsh, defina um alias em .aliases
("BS" = uma "barra invertida"; eu tive que usar isso para aparecer no meu navegador.)
e use em
lsnc
vez dels
No bash, tente um alias em .bash_aliases como
Com opções para
ls
, por exemplols -l
, aqui está uma correção simples:tcsh:
bater:
fonte
=
' após o lsnocase?ls
, não há nadals
esort
possa consertar a situação. Conforme observado em outras respostas, o problema precisa ser resolvido no shell, não com umals
sintaxe.