Tengo un directorio que contiene miles de archivos, algunos de ellos están ocultos.
El comando ls -aenumera todos los archivos, incluidos los ocultos, pero solo necesito enumerar los archivos ocultos.
¿Qué comando debo usar?
command-line
ls
nux
fuente
fuente

ls -ld .*ols -ald .*funcionaráRespuestas:
El comando :
Solo enumerará los archivos ocultos.
Explique :
fuente
.y..del partido. Sin embargo, también excluirá nombres de archivo ocultos de un solo carácter (perfectamente legales) como.a,.1etc. Quizás un globo mejor extendido sería, por.!(|.)ejemplo, un punto literal seguido de cualquier cosa excepto nada u otro punto (único), es decirls -d .!(|.)Hace exactamente lo que OP está buscando.
fuente
!(pattern-list),pattern-listhay una lista de uno o más patrones separados por a|, pero me resulta confuso que no tenga ningún patrón a la izquierda|. ¿Podría explicarme esa sintaxis?.no es seguido por (nada o.), excluyéndose.y...Si solo desea los archivos en su directorio actual (sin recursividad), puede hacer
Esto imprimirá los nombres de todos los archivos cuyo nombre comience con ay
.siga uno o más caracteres que no sean puntos. Tenga en cuenta que esto fallará para los archivos cuyo nombre comience con puntos consecutivos, por lo que, por ejemplo....foo, no se mostrará.También puedes usar
find:Esto
-mindepthasegura que no coincidamos.y los-prunemedios quefindno descenderán a subdirectorios.fuente
funciona para mí en Bash.
fuente
.y..en BashUsando
findyawk,Explicación:
find . -type f-> Lista todos los archivos en el directorio actual junto con su ruta como,awk -F"/" '$NF ~ /^\..*$/ {print $NF}'/como separador de campo awk comprueba el último campo que mira con un punto o no. Si comienza con un punto, imprime el último campo de esa línea correspondiente.fuente
find -type f. No necesita establecer explícitamente la ruta de búsqueda o-name "*".findPor lo general, es una mejor opción para búsquedas complicadas que usar el reconocimiento de nombres.o
find .busca en el directorio actual-mindepth 1excluye. y .. de la lista-maxdepth 1limita la búsqueda al directorio actual-name '.*'buscar nombres de archivo que comienzan con un punto-oo-name '*~'buscar nombres de archivo que terminan con una tilde (generalmente, estos son archivos de respaldo de programas de edición de texto)Sin embargo, esta y todas las otras respuestas pierden archivos que están en el
.hiddenarchivo del directorio actual . Si está escribiendo una secuencia de comandos, estas líneas leerán el.hiddenarchivo y mostrarán los nombres de los existentes.fuente
.hiddenarchivo? ¿Por qué habría un archivo llamado.hiddenque contiene los nombres de archivo? De todos modos, si hay uno, ¿por qué harías algo tan complejo cuando todo lo que necesitarías seríacat .hidden? Sufindcomando es correcto (ish) pero-name '*~'es irrelevante. Los archivos que terminan en tildes son archivos de respaldo pero no están ocultos de ninguna manera..hiddenarchivo es para archivos y carpetas que desea ocultar cuando no puede cambiar el nombre del archivo / carpeta para comenzar con un punto. En cuanto a los archivos que terminan en tildes, depende del sistema.ls -Bignorará dichos archivos, al igual que la mayoría de los exploradores de archivos GUI.cat .hiddenpuede mostrar archivos que ya no existen si esos archivos se eliminaron o movieron desde que se agregaron al.hiddenarchivo.Creo que puedes hacerlo con el siguiente comando.
ls -acomando que ingresó, que muestra todos los archivos y directorios en el directorio de trabajo actual.grep "^\."comando que agregué, que filtra la salida para mostrar solo archivos ocultos (su nombre comienza con".").grep -v "^\.$" | grep -v "^\..$"comando que agregué, que filtra la salida para excluir., .. (Son el directorio actual y principal).Si algunos nombres de archivo pueden tener más de una línea
"\n", el ejemplo anterior podría ser incorrecto.Entonces sugiero seguir el comando para resolver el problema.
fuente
ls.Qué más podría haber hecho,
is ls .?*ols .!(|)eso le mostrará todo en el directorio actual archivos / directorios ocultos en la parte superior y otros archivos / directorios a continuaciónpor ejemplo: desde mi terminal
Ahora observe en los resultados anteriores, le muestra cada archivo / directorio con su subdirección y cualquier archivo oculto justo debajo.
Lo siento, no puedo comentar. para explicar la diferencia entre aquí
ls .?*y la respuesta @ cioby23ls -d .[!.]* .??*y por qué es en realidad la impresión de archivos ocultos en dos ocasiones se debe a que, literalmente, le está pidiendo dos veces.??*,.?*,.[!.]*que son la misma cosa, por lo que la adición de cualquiera de ellos con diferentes personajes comando imprimirá dos veces.fuente
También puedes usar:
Esto le permitirá mostrar archivos ocultos normales y archivos ocultos que comienzan con 2 o 3 puntos, por ejemplo:
..hidden_filefuente
puedes usar el comando
Esto tiene la ventaja de permitir el listado de varias columnas, a diferencia del enfoque basado en grep en las
ls -a | grep "^\."solucionesfuente
Todas las respuestas hasta ahora se basan en el hecho de que los archivos (o directorios) cuyos nombres comienzan con un punto están "ocultos". Se me ocurrió otra solución, que podría no ser tan eficiente, pero esta solución no asume nada sobre los nombres de los archivos ocultos y, por lo tanto, evita la inclusión
..en el resultado (como lo hace la respuesta actualmente aceptada).El comando completo es:
Explicación
Lo que esto hace es enumerar todos los archivos (y directorios) dos veces,
pero solo muestra archivos ocultos una vez
-A.Luego se ordena la lista
| sortque hace que los archivos regulares (no ocultos) aparezcan dos veces y uno al lado del otro.Luego, elimine todas las líneas que aparecen más de una vez
| uniq -u, dejando solo líneas únicas.Finalmente, use
lsnuevamente para enumerar todos los archivos con las opciones personalizadas del usuario y sin enumerar el contenido de los directorios en la lista-d.EDITAR (Limitaciones):
Como señaló muru, esta solución no funcionará correctamente si hay archivos con nombres como
escaped\ncharacter.txtporqueecho -edividirá el nombre del archivo en dos líneas. Tampoco funcionará como se espera si hay dos archivos ocultos con casi el mismo nombre, excepto por un carácter especial, como.foo[tab].txty.foo[new-line].txtya que ambos se imprimen.foo?.txty serían eliminados poruniq -ufuente
.el primer personaje..., pero me pregunto qué tan bien funciona con nombres de archivo que contienen caracteres especiales.echo -einterpretarán. Además:lsno alterará los nombres de archivo para que dos nombres de archivo diferentes se muestren de la misma manera (por ejemplo, en algunas versioneslsse usarán?caracteres especiales, por lo que.foo\tbar(\t=> tabulación) y.foo\nbar(\n=> nueva línea) aparecerán comofoo?bar).Alternativamente, también puedes usar
echo .*p.ej
Si lo prefiere en formato de lista larga, simplemente convierta el espacio en blanco en una nueva línea.
fuente
Con bash, establecer la
GLOBIGNOREvariable especial es que un valor no vacío es suficiente para ignorarlo.y..al expandir los globos. De los documentos de Bash :Si lo ponemos al
.:..tanto.y..se ignorará. Dado que establecerlo en algo que no sea nulo también obtendrá este comportamiento, también podríamos configurarlo en solo.Entonces:
fuente