3 votos

¿Cómo puedo excluir . y .. cuando listado de elementos ocultos?

ls -d .* listas sólo se oculta "elementos" (archivos y directorios). (Creo) que técnicamente las listas de cada elemento de inicio con ., que incluye el actual . y por encima de .. directorios.

También sé que ls -A listas de "casi la totalidad" de los elementos, listado de tanto ocultos y onu-elementos ocultos, pero excluyendo . y ... Sin embargo, la combinación de estos como ls -dA .* no lista "casi todos" de mis elementos ocultos.

¿Cómo puedo excluir . y .. cuando listado de elementos ocultos?

4voto

WinEunuuchs2Unix Puntos 1032

A partir de la segunda respuesta en:

Esto funciona en mi máquina (que no voy a usar SSH como el OP, aunque):

ls -d .!(|.)

Si no hay archivos ocultos o directorios obtendrá un mensaje de error:

$ ls -d .!(|.)
ls: cannot access '.!(|.)': No such file or directory

El mensaje de error se produce en los directorios sin archivos ocultos porque . y .. son excluidos.

shopt cuenta

A partir de los comentarios:

ls -d .[!.]* trabaja sin extglob

1voto

GrumpyBurger Puntos 56

Usted puede usar cualquier conjunto de opciones, y la búsqueda de la secuencia de salida para una coincidencia o no coincidencia, el uso de grep.

Desde grep hombre de la página:

   grep  searches the named input FILEs (or standard input if no files are
   named, or if a single hyphen-minus (-) is given as file name) for lines
   containing  a  match to the given PATTERN.  By default, grep prints the
   matching lines.

Así, por ejemplo, si mi ls -A resultado es:

   . .. Desktop Documents Downloads

Mi ls -A |grep "Do" sería:

Documents
Downloads

También puedo usar invertir búsqueda utilizando -v a la búsqueda de algo que no es de mis expresiones.

Desde grep hombre de la página:

-v, --invert-match select non-matching lines

Así que, en su caso, la expresión sería: ls -d .* |grep "[.][a-z]\|[0-9]"

0voto

Martin Flaska Puntos 13

Puede utilizar también find:

find . -maxdepth 1 -type f -name '.*'

que imprime la ruta de acceso completa o:

find . -maxdepth 1 -type f -name '.*' -printf "%f\n"

Esto funciona también para los directorios vacíos / dichos archivos no.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: