¿Cómo excluyo directorios cuando enumero archivos en el directorio actual?
ls .
^ incluirá directorios en la lista.
¿Cómo excluyo directorios cuando enumero archivos en el directorio actual?
ls .
^ incluirá directorios en la lista.
Respuestas:
Prueba este:
find . -maxdepth 1 -not -type d
ls .
sin directorios, y aquí está.
-ls
o -exec ls -l {} \;
lo haría ls -l
sin directorios.
Para obtenerlo exactamente equivalente a ls .
usted, no debe mostrar directorios ocultos.
find . -maxdepth 1 -not -type d -and -not -name '.*'
y eso todavía te deja con el prefijo './' para cada nombre de archivo. Eso no es realmente un problema, pero creo que es un poco feo. Yo fui con:
ls -p | grep -v '/$'
Y eso le dará una lista que se ve igual, y también puede agregar ls
argumentos adicionales . Agregue un --color=always
y obtendrá sus colores de dir, o -a
para ver archivos ocultos.
Me gusta la respuesta de Alexander porque en realidad depende de un sistema de archivos característico del archivo en cuestión para que nunca se deje engañar. Mi respuesta será engañada por un archivo que tiene un '/' como último carácter en su nombre. Pero eso parece que está pidiendo problemas.
Aunque es una publicación antigua, pensé que esto podría ayudar ...
$ ls -l | grep -v ^ d
Enumerará todos los archivos, incluidos enlaces simbólicos, caracteres y archivos de bloque.
Las soluciones "encontrar" anteriores pierden algunas de las capacidades de ls , por ejemplo: enumerar solo archivos, ordenados en tiempo de modificación descendente.
Las respuestas "ls -p | grep" no tratan con elegancia otros elementos de ls como -R si se desean
La siguiente respuesta, mientras que más detallado, en mi opinión refleja la verdadera ls comportamiento y mayor flexibilidad para seleccionar "sólo los archivos"
ls -t . | while read line; do
if [ -f $line ]; then
echo $line
fi
done
Simplemente reemplace los interruptores ls como desee y el resultado se devolverá solo con archivos. Si también se requieren enlaces y otros elementos, entonces será necesario realizar una revisión menor para la prueba para su inclusión.
ls $(file --no-pad -F' ' * | grep -v directory | cut -d' ' -f1)
Con esto, aún puede usar cualquier otra opción que ls
generalmente tome. O ... eliminar -v
para enumerar solo directorios. O ... reemplace el directorio con cualquier otro tipo de archivo que file
comprenda e informe, como ASCII, vacío, ELF, etc.
ls -t .|while read f;do [ -f "$f" ]&& echo $f;done
es aproximadamente 3 veces más rápido en mis pruebas
Estaba en un sistema donde el find
binario no era compatible -not
y terminé usando:
ls|while read f;do [ -f "$f" ]&& echo $f;done
Ventajas: no se basa en otra cosa que no sea sh ls echo
compatible con bash y dash
Se puede cambiar para que coincida con otras cosas (como directorios) al cambiar -f
Es más rápido que algunas de las respuestas y usa menos RAM y CPU