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.
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.
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.
Se você sabe que os itens que você procura são sequencialmente nomeados, você pode usar expansões de shell de várias maneiras.
$ xdg-open [a-d]
$ xdg-open {a..d}
$ xdg-open a* b*
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.
$ xdg-open !(B)
$ xdg-open !(A|B)
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.
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
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 .
Tags command-line bash shell command terminal