Como faço para listar arquivos que tenham um “s” como primeiro e um “l” como o último caractere com um comando shell?

-6

Estou tentando listar arquivos que começam com "s" e com "l".

O comando que estou tentando é ls -l *sfa*

    
por Dragonslayer 20.03.2016 / 22:03

4 respostas

4

A questão não está muito clara ... com base no seu comentário para @cmks, aqui estão duas opções:

  1. Se você estiver procurando por arquivos em que o primeiro caractere do nome do arquivo seja "s" e o último seja "l", use ls -l s*l

  2. Se você estiver procurando por arquivos em que o primeiro caractere do nome do arquivo seja (a "a" ou "s") e o último seja (a "a" ou "l") - use ls [as]*[al]

Se for outra coisa, edite sua pergunta para esclarecer ...

Sua versão ls -l sfa listará apenas arquivos com o nome exato "sfa" (ou, se houver um diretório com esse nome, quaisquer arquivos nesse diretório). Não faz o que parece estar procurando.

As regras para correspondência de nomes de arquivos ("globbing") são bem simples:

  1. "?" corresponde a qualquer caractere único
  2. "*" corresponde a qualquer número (zero ou mais) de caracteres
  3. Use colchetes ([]) para corresponder a um único caractere de uma coleção: [fqsb] corresponde a f, q, s ou b; [b-d] corresponde a b, c ou d
  4. Use chaves ({}} para corresponder a uma das várias strings específicas: {foo, bar} corresponde a "foo" ou "bar".

O separador de diretório "/" é excluído da correspondência - a correspondência é feita apenas em nomes de arquivos.

Veja também ShellGlobbing na ajuda do Ubuntu.

    
por laugh 20.03.2016 / 23:39
1
ls -l s*l
ls -l s?l
  • Um "*" significa 0 ou mais caracteres
  • Se você quiser uma quantidade exata de letras entre o "s" e o "l" a "?" significa 1 char. 2 "??? significa 2 caracteres.
  • Você também pode colocar coleções entre []. Então, ls -l s[a-z]l iria limitá-lo a sal a szl

Dos comentários:

Se você quiser arquivos que começam com "s" e "a", use uma coleção:

ls -l [sa]*

lista todos os arquivos que começam com essas duas letras. Você pode usar isso para criar todos os tipos de grupos. Exampe [sa] [df] [1ojwfihwef] * faria com que ele procurasse pelo arquivo começando com 3 letras que correspondessem a cada grupo específico

    
por Rinzwind 20.03.2016 / 22:11
0

Você pode fornecer mais de um parâmetro ao comando ls por vez:

ls -l H* *l

O que acontece é que o shell faz um Pathname Expansion . Você pode ler mais sobre isso nas páginas de manual do bash:

man bash

Como o shell faz isso, o shell chama o comando ls da seguinte forma:

ls -l Hejo Hesja Hejan Lesl Lesil Lesul Lestl

Ele é importado para entender, não é o comando ls , mas o shell que procura por nomes de caminho correspondentes.

    
por cmks 20.03.2016 / 22:10
0

Além de usar o comando ls e curingas do shell, também é possível usar o comando find .

$ find -maxdepth 1 -iname "s*l"                                                                       
./script.pl
./storm carl
./sal
./simple_curl
    
por Sergiy Kolodyazhnyy 31.12.2016 / 12:42