Cómo hacer coincidir los archivos ocultos dentro de los directorios dados
por ejemplo
Si doy el siguiente comando, no está dando 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 quizás aquí dos veces.
maybehere*/.*
y agregue lo anterior para todosRespuestas:
Aproveche la expansión de la llave:
o alternativamente
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 los archivos cuyos nombres comenzaron con un solo punto seguido de no un punto; que son solo nombres de archivo de 2 caracteres en la primera forma..??*
coincide con archivos ocultos que tienen al menos 3 caracteres de longitud..?*
como arriba, pero el segundo personaje debe ser un puntoEl punto es excluir los enlaces duros al directorio actual y principal (
.
y..
), ¡pero incluir todos los archivos normales de tal manera que cada uno de ellos se cuente solo una vez!Por ejemplo, lo más simple sería escribir
Significa que la lista contiene un punto
.
y "nada" (nada está entre,
y se cierra}
), por lo que todos los archivos ocultos (que comienzan desde un punto) y todos los archivos no ocultos (que comienzan desde "nada") coincidirían. El problema es que esto también coincidiría.
y..
, y esto probablemente no sea lo que desea, por lo que debemos excluirlo de alguna manera.Última palabra sobre la expansión del aparato ortopédico.
La expansión de llaves es un mecanismo por 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{
y termina con}
.bash
El manual proporciona un ejemplo de uso muy básico y al mismo tiempo muy común:fuente
{ }
man bash
capítulo "Expansión de llaves"..??*
no coincide.a
,.b
....[^.]*
no coincide..foo
..foo
coincide con ambos.[^.]*
y.??*
. Que desea{.[!.],..?,}*
.Como ya estás usando la sintaxis específica de GNU (
-b
):De esa manera, es
du
que enumera los archivos en losmaybehere*
directorios (y no excluye los archivos de puntos).-d1
limita el informe del uso del disco a un nivel inferior (incluidos los no directorios con-a
).De lo contrario, para que los globos incluyan archivos ocultos (excepto
.
y..
), cada shell tiene su propia sintaxis:zsh
:ksh93
:bash
:tcsh
:yash
:aunque tenga cuidado, incluye
.
y..
en sistemas que los incluyen en el resultado de loreaddir()
cual hace que sea difícil de usar.fuente
Otra opción está disponible aquí :
fuente
..
?../
y debajo...myfile
; agregar..?*
para eso. Pero +1 por usar la sintaxis glob adecuada para coincidencias negativas.Si solo desea enumerar directorios ocultos u operar en directorios ocultos, entonces, como dijo Costas, puede usar
du -b maybehere*/.*
Esto le permitirá operar en archivos y directorios ocultos. Si solo desea directorios ocultos, puede especificarlo con
du -b maybehere*/.*/
fuente
maybehere*/.*
ymaybehere*/*
uno oculto y otro ocultodu -b
recoge tanto ocultos como no ocultos.Si bien no es shell directamente, puede usar find con profundidad limitada como esta
fuente