alguma coisa =
|grep -e ".*t\.[^.]*" -e "^[^.]*t$"
Eu devo usar o comando ls para encontrar arquivos que terminem em uma determinada letra, mas não importa se o arquivo tem uma extensão ou não.
Por exemplo, eu quero fazer isso
> ls
test test.txt test.ascii other.txt
> ls [something]
test test.txt test.ascii
Para que eu possa encontrar arquivos que terminem com um 't', mas não inclui o arquivo em que a extensão termina em t
Editar: Eu devo assumir que os únicos caracteres de período no nome do arquivo serão para a extensão e não haverá outros
Se você estiver usando o bash
shell, poderá usar a opção extglob
para fazer um filtro complexo. Por exemplo:
Solução:
bash$ shopt -s extglob
bash$ ls
other.txt test test.ascii test.txt
bash$ ls *@(t.*|[^.]?[[:alnum:]]t)
test test.ascii test.txt
Explicação:
PATTERN1 (t.*)
corresponde a qualquer arquivo terminado com um "t" seguido por uma extensão de arquivo:
bash$ ls *@(t.*)
test.ascii test.txt
PATTERN2 ([^.]?[[:alnum:]]t)
corresponde a qualquer arquivo que NÃO tenha um ponto, seguido por zero ou mais caracteres alfanuméricos e termina com um "t". Isso corresponde a arquivos que não possuem uma extensão de arquivo:
bash$ ls *@([^.]?[[:alnum:]]t)
test
O glob @(PATTERN1|PATTERN2)
corresponde a um dos padrões exatamente uma vez. O padrão combinado filtra apenas o que estamos procurando.
Para mais informações sobre os padrões do bash, consulte: link
Supondo que você precisa de arquivos com apenas um ponto (extensão) e um Assumindo que você precisa procurar no diretório atual (./), você pode usar:
$ find . -maxdepth 1 -type f -regex './[^.]*t\(\.[^.]*\)?'
./test.txt
./test.ascii
./test
Isso pode ser usado, mas incluirá diretórios (e falhará se nomes de arquivos tiverem novas linhas):
$ printf '%s\n' * | grep -e ".*t\.[^.]*" -e "^[^.]*t$"
test
test.ascii
test.txt
tt
Para permitir nomes de arquivos com novas linhas, use (GNU grep):
$ printf '%s$ find . -maxdepth 1 -type f -regex './[^.]*t\(\.[^.]*\)?'
./test.txt
./test.ascii
./test
' * | grep -ze ".*t\.[^.]*" -e "^[^.]*t$" | xargs -0
test test.ascii test.txt tt
Tags command-line ls linux