Usando globbing / wildcards ao abrir arquivos do terminal

1

Eu tenho uma pasta A . Dentro da pasta, existem alguns arquivos a,b,c,d e há uma subpasta, B , contendo os arquivos e,f,g .

Suponha que eu queira abrir arquivos a,b,c,d : então eu apenas digito xdg-open * . No entanto, isso também entra na subpasta B e também abre e,f,g . Qual é a maneira mais fácil de abrir apenas a,b,c,d ?

EDIT: o que eu realmente quero dizer com a questão é como abrir todos os arquivos em uma pasta, mas não os contidos em quaisquer subpastas.

    
por Newb 15.11.2013 / 22:41

2 respostas

3

Que tal find A -maxdepth 1 -type f -exec xdg-open {} \;

Isso deve abrir todos os arquivos na pasta A sem ir além do nível superior.

    
por 15.11.2013 / 23:40
1

Método 1 - expansões da casca

Se você sabe que os itens que você procura são sequencialmente nomeados, você pode usar expansões de shell de várias maneiras.

Exemplos

$ xdg-open [a-d]
$ xdg-open {a..d}
$ xdg-open a* b*

Método # 2 - globbing estendido

No Bash (versões 3.2+), você pode usar a globalização estendida para incluir tudo, exceto algo, o que acredito ser o que você está pedindo.

Exemplos

$ xdg-open !(B)
$ xdg-open !(A|B)

Demos

Frequentemente, usarei echo para que eu possa ver o que o globstar ou a globbing estendida funcionarão sem realmente executar um comando real nas listas expandidas de arquivos e / ou diretórios.

Exemplo

Por exemplo, eu tenho o seguinte diretório de arquivos.

$ ls -l
total 8
-rw-rw-r-- 1 saml saml    0 Nov 15 20:12 a
drwxrwxr-x 2 saml saml 4096 Nov 15 20:23 A
-rw-rw-r-- 1 saml saml    0 Nov 15 20:12 b
drwxrwxr-x 2 saml saml 4096 Nov 15 20:12 B
-rw-rw-r-- 1 saml saml    0 Nov 15 20:12 c
-rw-rw-r-- 1 saml saml    0 Nov 15 20:12 d
-rw-rw-r-- 1 saml saml    0 Nov 15 20:12 e
-rw-rw-r-- 1 saml saml    0 Nov 15 20:12 f

Agora, se experimentarmos as expansões acima, podemos ver como elas são justas.

$ echo [a-d]
a A b B c d

$ echo {a..d}
a b c d

$ echo a* b*
a b

$ echo !(B)
a A b c d e f

$ echo !(A|B)
a b c d e f

Ampliação da globalização

Há uma variedade de outros métodos que você pode usar para controlar a maneira como o shell corresponde. Por exemplo:

  ?(pattern-list)   Matches zero or one occurrence of the given patterns
  *(pattern-list)   Matches zero or more occurrences of the given patterns
  +(pattern-list)   Matches one or more occurrences of the given patterns
  @(pattern-list)   Matches one of the given patterns
  !(pattern-list)   Matches anything except one of the given patterns

Você pode ler mais sobre eles neste artigo do Linux Journal intitulado: Bash Extended Globbing .

    
por 15.11.2013 / 22:45