Como listar todas as pastas em um diretório que não comece com o caractere L?

1

Eu quero listar todas as pastas que não começam com L.

ls [L]* ///gives all the folders starting with L 

Eu gostaria de reverter a pesquisa e listar todas as pastas que não estão começando com L?

    
por CyanideBlue 31.01.2017 / 16:42

3 respostas

5

Use ^ :

ls [^L]*

faz o que você quer - bem, assumindo que ls [L]* corresponde ao que você está procurando (lista tudo começando com "L", não apenas pastas).

a resposta do cuonglm mostra como limitar a lista para pastas, com zsh .

    
por 31.01.2017 / 16:52
4

O que você usou é chamado globbing , que não pode filtrar o diretório ou o arquivo em shells POSIX.

com zsh :

print -rl -- [^L]*(/)

Se você quiser diretórios ocultos:

print -rl -- [^L]*(D/)

POSIXLY:

find . ! -name . -prune ! -name 'L*' -type d
    
por 31.01.2017 / 17:10
2

Na verdade, ls [L]* (que é equivalente a ls L* ) lista os arquivos no diretório atual que não são diretórios e cujo nome começa com L e lista o conteúdo dos subdiretórios do diretório atual cujo nome começa com L . Para listar os arquivos no diretório atual que não são diretórios e cujo nome começa com L , você precisa passar a opção -d : ls -d L* .

Para corresponder arquivos cujo nome não comece com L , você pode usar o padrão glob [^L] (que também pode ser escrito [!L] , para compatibilidade com outros shells). [^L] corresponde a qualquer caractere diferente de L , portanto, [^L]* corresponde a nomes de arquivos que começam com qualquer caractere diferente de L . Como os nomes dos arquivos não podem estar vazios, [^L]* corresponde exatamente aos nomes dos arquivos que não começam com L .

Como alternativa, se a opção extended_glob estiver configurada (a maioria dos usuários coloca isso em .zshrc ), você pode usar o operador ^ para negar correspondências: ^L* corresponde aos nomes de arquivos que não correspondem a L* , ou seja, os nomes dos arquivos que não começam com L . Esta sintaxe é específica para zsh.

    
por 01.02.2017 / 01:22