Tengo un directorio que contiene miles de archivos, algunos de ellos están ocultos.
El comando ls -a
enumera 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
,.1
etc. 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-list
hay 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
-mindepth
asegura que no coincidamos.
y los-prune
medios quefind
no descenderán a subdirectorios.fuente
funciona para mí en Bash.
fuente
.
y..
en BashUsando
find
yawk
,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 "*"
.find
Por 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 1
excluye. y .. de la lista-maxdepth 1
limita la búsqueda al directorio actual-name '.*'
buscar nombres de archivo que comienzan con un punto-o
o-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
.hidden
archivo del directorio actual . Si está escribiendo una secuencia de comandos, estas líneas leerán el.hidden
archivo y mostrarán los nombres de los existentes.fuente
.hidden
archivo? ¿Por qué habría un archivo llamado.hidden
que 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
? Sufind
comando 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..hidden
archivo 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 -B
ignorará dichos archivos, al igual que la mayoría de los exploradores de archivos GUI.cat .hidden
puede mostrar archivos que ya no existen si esos archivos se eliminaron o movieron desde que se agregaron al.hidden
archivo.Creo que puedes hacerlo con el siguiente comando.
ls -a
comando 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_file
fuente
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
| sort
que 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
ls
nuevamente 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.txt
porqueecho -e
dividirá 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].txt
y.foo[new-line].txt
ya que ambos se imprimen.foo?.txt
y serían eliminados poruniq -u
fuente
.
el primer personaje...
, pero me pregunto qué tan bien funciona con nombres de archivo que contienen caracteres especiales.echo -e
interpretarán. Además:ls
no alterará los nombres de archivo para que dos nombres de archivo diferentes se muestren de la misma manera (por ejemplo, en algunas versionesls
se 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
GLOBIGNORE
variable 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