Como combinar * com arquivos ocultos dentro de um diretório

19

Como combinar os arquivos ocultos nos diretórios fornecidos

por exemplo

Se eu der o comando abaixo, não está dando o resultado dos arquivos ocultos,

 du -b maybehere*/*

como conseguir isso simples usando um único comando em vez de usar

du -b maybehere*/.* maybehere*/*

como eu preciso digitar talvez duas vezes.

    
por vidhan 22.02.2015 / 13:46

4 respostas

20

Aproveite a expansão de contraventores:

du -b maybehere*/{.??,}*

Eu usei ?? para não corresponder a .. , ou seja, o diretório pai. Alternativamente

du -b maybehere*/{.[^.],}*

Expansão de chaves é um mecanismo pelo qual você pode incluir mais arquivos / strings / whatever para a linha de comando, escrevendo menos caracteres. A sintaxe é {word1,word2,...} , ou seja, é uma lista de sequências separadas por vírgula que começa em { e termina com } . bash manual fornece um exemplo muito básico e ao mesmo tempo muito comum de uso:

$ echo a{d,c,b}e
ade ace abe

Agora voltando à sua pergunta, o simples seria apenas escrever

du -b maybehere*/{.,}*

Isso significa que a lista contém um ponto . e ... nada (nada é entre , e fechamento } - assim, todos os arquivos que começam com ponto e todos os arquivos que partem do nada seriam correspondentes. O problema é que isso também corresponderia a .. , o que indica o diretório pai, e isso provavelmente não é o que você quer, então temos que excluí-lo de alguma forma.Isso é para o qual ?? - garante que deve haver pelo menos dois outros caracteres ou (no caso de .[^.] ) - o caractere após o primeiro ponto não deve ser outro ponto.

    
por 22.02.2015 / 14:08
12

Como você já está usando a sintaxe específica do GNU ( -b ):

du -abd1 maybehere*/

Dessa forma, é du que lista os arquivos nos diretórios maybehere* (e não exclui os arquivos de ponto). -d1 limita o relatório de uso de disco a um nível abaixo (incluindo não diretórios com -a ).

Caso contrário, para que os globs incluam arquivos ocultos (exceto . e .. ), cada shell possui sua própria sintaxe:

  • zsh :

    du -b maybehere*/*(D)
    
  • ksh93 :

    (FIGNORE='@(.|..)'; du -b maybehere*/*)
    
  • bash :

    (shopt -s dotglob; du -b maybehere*/*)
    
  • tcsh :

    (set globdot; du -b maybehere*/*)
    
  • yash :

    (set -o dot-glob; du -b maybehere*/*)
    

    embora tenha cuidado, ele inclui . e .. nos sistemas que os incluem no resultado de readdir() , o que dificulta sua utilização.

por 22.02.2015 / 14:49
4

Outra opção está disponível aqui :

du -sm .[!.]* *
    
por 10.08.2018 / 08:34
0

Se você quiser apenas listar diretórios ocultos ou operar em diretórios ocultos, então, como Costas disse, você pode usar

du -b maybehere*/.*

Isso permitirá que você opere em arquivos e diretórios ocultos. Se você quiser apenas diretórios ocultos, você pode especificar isso com

du -b maybehere*/.*/

    
por 22.02.2015 / 14:00