Como posso fazer 'ls' em um dotfile?

0

ls em um arquivo de ponto

Meu diretório contém:

$ ls -A    
.dotfile20091021   file20091020       file20091021

Eu quero listar todos os arquivos contendo 20091021 em seu nome.

Se eu correr:

$ ls -A *20091021*    
file20091021

Se eu correr:

$ ls -A .*20091021*    
.dotfile20091021

Posso obter os dois arquivos em um único comando "ls"?

    
por dogbane 21.10.2009 / 12:41

4 respostas

1

De acordo com este link , há uma opção bash para glob arquivos de ponto:

shopt -s dotglob

Se você usar bash, tudo que você precisa fazer depois disso é:

ls -A *20091021*

(não é possível testá-lo aqui)

    
por 21.10.2009 / 12:49
4
ls -A1 | grep "20091021"
    
por 21.10.2009 / 12:45
2

Você pode simplesmente fazer

ls -a *20091021 .*20091021

(seguindo estritamente o seu pedido que você quer fazer isso em um único ls )

    
por 21.10.2009 / 12:46
0

Você está confiando em (qualquer shell que esteja usando) para fazer a expansão glob.

ls -lah | grep \.foo

.. pode ajudá-lo a resolver isso de uma forma portátil.

Por exemplo:

user@tower:~ ls -lah | grep \.mozilla
drwx------  3 root root 4.0K 2007-11-14 06:17 .mozilla
user@tower:~    

Eis o poder dos cachimbos :) Expandir isso é um exercício para o leitor. shopt não é portável e em sistemas que usam um shell estritamente POSIX (como traço) ele quebra. É melhor escrevê-lo de maneira simples e portável ... ou você fará o upload do seu script testado e aprovado para uma caixa que esteja rodando outra distro e o verá quebrar, horrivelmente.

NB, cada shell faz a expansão glob à sua maneira, amplamente determinada por sua licença. Por favor, por favor, evite os bashismos. O Ubuntu gastou dezenas de milhares de dólares para se livrar deles em seus produtos.

    
por 21.10.2009 / 12:45