Como combinar os arquivos ocultos dentro dos 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 aqui.
maybehere*/.*
e acrescente acima para todos #Respostas:
Aproveite a expansão da cinta:
ou alternativamente
A lógica por trás disso provavelmente não é óbvia, então aqui está a explicação:
*
corresponde a todos os arquivos não ocultos.[^.]
corresponde aos arquivos cujos nomes começaram com ponto único seguido por não um ponto; são apenas dois nomes de arquivo de caracteres na primeira forma..??*
corresponde a arquivos ocultos com pelo menos 3 caracteres..?*
como acima, mas o segundo caractere deve ser um pontoO objetivo é excluir links físicos para o diretório atual e principal (
.
e..
), mas incluir todos os arquivos normais de forma que cada um deles seja contado apenas uma vez!Por exemplo, o mais simples seria apenas escrever
Isso significa que a lista contém um ponto
.
e "nada" (nada está entre,
e fechando}
), portanto, todos os arquivos ocultos (que começam em um ponto) e todos os arquivos não ocultos (que começam em "nada") corresponderiam. O problema é que isso também corresponderia.
e..
, e provavelmente não é o que você deseja, então temos que excluí-lo de alguma forma.Palavra final sobre a expansão da cinta.
A expansão entre chaves é um mecanismo pelo qual você pode incluir mais arquivos / seqüências de caracteres / qualquer coisa na linha de comando escrevendo menos caracteres. A sintaxe é
{word1,word2,...}
, ou seja, é uma lista de sequências separadas por vírgula que começa{
e termina com}
.bash
manual fornece um exemplo de uso muito básico e ao mesmo tempo muito comum:fonte
{ }
Eu não tenho idéia :( você pode me dar uma direção para obter mais informações sobre eleman bash
capítulo "Brace Expansion"..??*
falha em corresponder.a
,.b
....[^.]*
falha em corresponder..foo
..foo
combina ambos.[^.]*
e.??*
. Você quer{.[!.],..?,}*
.Como você já está usando a sintaxe específica do GNU (
-b
):Dessa forma, é
du
que lista os arquivos nosmaybehere*
diretórios (e não exclui os arquivos de ponto).-d1
limita o relatório de uso do disco a um nível inferior (incluindo os não diretórios-a
).Caso contrário, para que os globs incluam arquivos ocultos (exceto
.
e..
), cada shell possui sua própria sintaxe:zsh
:ksh93
:bash
:tcsh
:yash
:embora tenha cuidado, ele inclui
.
e..
em sistemas que os incluem e o resultadoreaddir()
dificilmente pode ser usado.fonte
Outra opção está disponível aqui :
fonte
..
?../
e abaixo...myfile
; adicione..?*
para isso. Mas +1 para usar a sintaxe glob adequada para correspondências negativas.Se você deseja apenas listar diretórios ocultos ou operar em diretórios ocultos, 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, poderá especificar isso com
du -b maybehere*/.*/
fonte
maybehere*/.*
emaybehere*/*
um dos ocultos e outro para os não ocultos #du -b
pega ocultos e não ocultos.Embora não seja shell diretamente, você pode usar o find com profundidade limitada como esta
fonte