bash – Cómo hacer coincidir * con archivos ocultos dentro de un directorio

Pregunta:

Cómo hacer coincidir los archivos ocultos dentro de los directorios dados

por ejemplo

Si doy el siguiente comando, no da el resultado de los archivos ocultos,

 du -b maybehere*/*

cómo lograr esto simple usando un solo comando en lugar de usar

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

ya que necesito escribir tal vez aquí dos veces.

Respuesta:

Aprovecha la expansión del corsé:

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

o alternativamente

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

La lógica detrás de esto probablemente no sea obvia, así que aquí hay una explicación:

  • * coincide con todos los archivos no ocultos
  • .[^.] coincide con archivos cuyos nombres comienzan con un punto seguido de un punto; que son sólo nombres de archivo de 2 caracteres en el primer formulario.
  • .??* coincide con archivos ocultos que tienen al menos 3 caracteres de longitud
  • ..?* como arriba, pero el segundo carácter debe ser un punto

El objetivo es excluir los enlaces físicos al directorio actual y principal ( . Y .. ), ¡pero incluya todos los archivos normales de tal manera que cada uno de ellos se contará solo una vez!

Por ejemplo, lo más simple sería escribir

du -b maybehere*/{.,}*

Significa que la lista contiene un punto . y "nada" (no hay nada entre , y cerrando } ), por lo tanto, todos los archivos ocultos (que comienzan con un punto) y todos los archivos no ocultos (que comienzan con "nada") coincidirían. El problema es que esto también coincidiría . y .. , y esto probablemente no sea lo que desea, por lo que tenemos que excluirlo de alguna manera.


Últimas palabras sobre la expansión del corsé.

La expansión de llaves es un mecanismo mediante el cual puede incluir más archivos / cadenas / lo que sea en la línea de comandos escribiendo menos caracteres. La sintaxis es {word1,word2,...} , es decir, es una lista de cadenas separadas por comas que comienza desde { y termina con } . bash manual ofrece un ejemplo de uso muy básico y al mismo tiempo muy común:

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

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım