cómo agrupar cada file oculto, excepto el directory actual y principal

Quiero englobar todos los files y directorys ocultos, pero no el directory actual ( . ) Y principal ( .. ).

Estoy usando bash.

Observe el comportamiento actual:

 $ ls -a . .. ...a ...aa ..a ..aa .a .aa .aaa a $ echo * a $ echo .* . .. ...a ...aa ..a ..aa .a .aa .aaa 

Me gustaría .* Comportarse así

 $ echo .* ...a ...aa ..a ..aa .a .aa .aaa 

Existe la opción de shell dotglob

 $ shopt -s dotglob 

eso funciona de una manera; ahora puedo usar * para englobar todo (oculto o no) pero no . y ..

 $ echo * ...a ...aa ..a ..aa .a .aa .aaa a 

pero ahora no puedo diferenciar entre oculto o no. Además,. .* Aún globs . y ..

 $ echo .* . .. ...a ...aa ..a ..aa .a .aa .aaa 

¿Hay alguna manera de hacer .* No expandir a . y .. ?

Puede usar la variable GLOBIGNORE para ocultar el . y .. directorys. Esto también establece automáticamente la opción dotglob , por lo que * ahora coincide con los files ocultos y no ocultos. dotglob embargo, nuevamente puede desarmar manualmente el dotglob , esto le da el comportamiento que desea.

Mira este ejemplo:

 $ ls -a . .. a .a ..a $ GLOBIGNORE=".:.." $ shopt -u dotglob $ echo * # all (only non-hidden) a $ echo .* # all (only hidden) .a ..a 

Este globo requiere un punto inicial y al less otro carácter no punto. Esto englobará todos los posibles files ocultos, pero no . o .. , que es exactamente lo que pediste.

 ls -ld .[!.]* 

¿Estás buscando files? ¿Estás en condiciones de usar find ?

Algo así como (suponiendo que GNU find ):

 find . -mindepth 1 -maxdepth 1 -name ".*" -printf "%P\n" 

Con zsh , fish , pdksh y al less algunos de sus derivados como mksh , posh :

 echo .* 

(los glóbulos de esos caparazones nunca se expanden, o .. , lo cual es lo más sensato que se puede hacer).

Con bash :

 shopt -s dotglob echo [.]* 

(con dotglob y .. no están expandidos a less que uses un glob que comience con un literal . como en .* o dir/.* , ya que de lo contrario, cosas como chmod +rwx -- * tendrían consecuencias inesperadas).

O:

 GLOBIGNORE=. echo .* 

(con bash , como para dotglob y por la misma razón, tan pronto como GLOBIGNORE no esté vacío, tanto . como .. se ignoran automáticamente en globs no contiene barras (y dotglob está habilitado) y esta vez incluso con un literal . arriba. Tenga en count que GLOBIGNORE=/ por ejemplo tendría el mismo efecto).

Tenga en count sin embargo eso . y .. aún estaría incluido en globs como dir/.* o .*/file .

Con ksh93

 FIGNORE='@(.|..)' echo .* 

Desea mostrar files / carpetas ocultos PERO . y .. ?

Usa este comodín bash {.[!.]*,..?*}

Data de muestra

Puede intentar generando datos de muestra:

 $ touch ...a ...aa ..a ..aa .a .aa .aaa a $ mkdir ...b ...bb ..b ..bb .b .bb .bbb b 

Prueba

A continuación puede ver las inputs eliminadas esperadas:

 $ diff <(\ls -a) <(\ls -ad {.[!.]*,..?*}) 1,3d0 < . < .. < a 11d7 < b 

Pro

Útil para eliminar todos los elementos ocultos, por ejemplo:

 $ rm -rf .* rm: cannot remove directory: `.' rm: cannot remove directory: `..' # <regenerate sample data here> $ rm -rf {.[!.]*,..?*} # No error 

testing ls -A .

extracto del manual

"-A, – casi todos no aparecen implícitos y …")

 ls -1a|egrep -v '^(\.|\.\.)$'