Usar globbing / comodines al abrir files desde la Terminal

Tengo una carpeta A Dentro de la carpeta, hay algunos files a,b,c,d y hay una subcarpeta, B , que contiene files e,f,g .

Supongamos que quiero abrir los files a,b,c,d : entonces simplemente xdg-open * . Sin embargo, esto también entra en la subcarpeta B y abre e,f,g también. ¿Cuál es la forma más fácil de abrir solo a,b,c,d ?

EDITAR: lo que realmente quiero decir con la pregunta es cómo abrir todos los files en una carpeta, pero no los que figuran en las subcarpetas.

¿Qué le find A -maxdepth 1 -type f -exec xdg-open {} \;

Eso debería abrir todos los files en la carpeta A sin ir más allá del nivel superior.

Método n. ° 1: expansiones de shell

Si sabe que los elementos que busca se nombran de forma secuencial, puede usar expansiones de shell de varias forms.

Ejemplos

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

Método n. ° 2: globbing extendido

En Bash (versiones 3.2 y superiores) puedes usar globbing extendido para include todo excepto algo, que creo que es lo que estás pidiendo.

Ejemplos

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

Población

Muchas veces usaré el echo para poder ver lo que funcionará globstar o globbing extendido sin realmente ejecutar un command real en las lists expandidas de files y / o directorys.

Ejemplo

Digamos, por ejemplo, que tengo el siguiente directory de files.

 $ 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 

Ahora bien, si probamos las expansiones anteriores, podemos ver cómo son justas.

 $ echo [ad] a A b B cd $ echo {a..d} abcd $ echo a* b* ab $ echo !(B) a A bcdef $ echo !(A|B) abcdef 

Globbing extendido

Hay una variedad de otros methods que puede usar para controlar la forma en que el shell coincide. Por ejemplo:

  ?(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 

Puede leer más sobre ellos en este artículo de Linux Journal titulado: Bash Extended Globbing .