¿Cómo puedo enumerar todos los archivos de una carpeta pero no sus carpetas o subarchivos? En otras palabras: ¿Cómo puedo enumerar solo los archivos?
bash
file-listing
Rodrigo
fuente
fuente
Respuestas:
Usando
find
:find . -maxdepth 1 -type f
El uso de la
-maxdepth 1
opción garantiza que solo busque en el directorio actual (o, si reemplaza el.
con alguna ruta, ese directorio). Si desea una lista recursiva completa de todos los archivos en ese y subdirectorios, simplemente elimine esa opción.fuente
find
en mac, no tiene-type
ni-maxdepth
opciones.-type
y-maxdepth
no son opciones en el sentido normal; BSDfind
(como se usa en OS X) los llama primarios , y deben ir después del operando (s) del nombre de archivo (.
, en este caso, tenga en cuenta que, a diferencia de Linux, la versión BSD necesita al menos un operando de nombre de archivo explícito); el comando en esta respuesta definitivamente funciona en una Mac.find *.png -maxdepth 0 -type f
evitar el./
prefijo en los nombres de los archivos de salida; también tenga en cuenta el-maxdepth
de0
, no1
), siempre que todo lo que necesite sean los nombres de los archivos en orden alfabético . Si desea lols
que de otra manera puede hacer por usted (formato / orden de salida diferente, control en línea sobre si los elementos ocultos están incluidos o no), complementado con filtrado de [múltiples] tipos, el script de mi respuesta puede ayudar.find * -maxdepth 0 -type f
(una alternativa derivada del comentario de @ AlexHall) confind . -maxdepth 1 -type f
la respuesta:find . ...
invariablemente incluye elementos ocultos, invariablemente antepone los nombres de archivo de salida./
y, con GNUfind
(Linux), generalmente genera una lista sin clasificar.find * ...
, debido a que permite que el shell realice un globbing por adelantado, excluye de forma predeterminada los elementos ocultos (se puede cambiar conshopt -s dotglob
), genera meros nombres de archivo (sin prefijo), ordenados alfabéticamente. Ninguno de los enfoques incluye enlaces simbólicos a archivos; use la opción-L
para hacerlo.ls -p le permite mostrar / después del nombre de la carpeta, que actúa como una etiqueta que puede eliminar.
fuente
ls
además defind
, ya que el último devuelve rutas relativas y el primero solo nombres de archivo. Utilice la herramienta adecuada para el trabajo.find
answer (find . -maxdepth 1 -type f
) basado en carlpett funciona en principio, pero nols
./
ls
es exactamente lo mismo que usar : obtienes una lista potencialmente desordenada de nombres de archivos con el prefijo y pierdes la capacidad de aplicar las muchas opciones ;también
find
invariablemente también encuentra elementos ocultos , mientras quels
el comportamiento depende de la presencia o ausencia de las opciones-a
o-A
.Una mejora , sugerida por Alex Hall en un comentario sobre la pregunta, es combinar el globbing de caparazones con
find
:find * -maxdepth 0 -type f # find -L * ... includes symlinks to files
ls
muchas otras opciones de clasificación / formato de salida.La respuesta de Hans Roggeman
ls
+grep
es pragmática, pero lo bloquea para usar el-l
formato de salida largo ( ) .Para hacer frente a estas limitaciones que escribió el
fls
( f iltering ls ) de utilidad ,ls
al mismo tiempo que proporciona capacidad de filtrado de tipos ,f
archivos,d
directorios yl
enlaces simbólicos antes de una lista dels
argumentos (ejecutarfls --help
ofls --man
para obtener más información).Ejemplos:
fls f # list all files in current dir. fls d -tA ~ # list dirs. in home dir., including hidden ones, most recent first fls f^l /usr/local/bin/c* # List matches that are files, but not (^) symlinks (l)
Instalación
Plataformas compatibles
Desde el registro npm
Nota: Incluso si no usa Node.js, su administrador de paquetes
npm
funciona en todas las plataformas y es fácil de instalar; tratarcurl -L https://git.io/n-install | bash
Con Node.js instalado, instale de la siguiente manera:
Nota :
Si lo necesita
sudo
depende de cómo haya instalado Node.js / io.js y de si ha cambiado los permisos más tarde ; si recibe unEACCES
error, vuelva a intentarlo consudo
.El
-g
asegura global de la instalación y se necesita para ponerfls
en su sistema de$PATH
.Instalación manual
bash
script comofls
.chmod +x fls
.$PATH
, como/usr/local/bin
(macOS) o/usr/bin
(Linux).fuente
-1
(el número uno);ls
en realidad, el valor predeterminado es la salida "desnuda", es decir, sólo nombres de archivo, pero cuando se envía a un terminal utiliza un diseño basado en columnas (varios nombres de archivo por línea). Para obtener un nombre de archivo por línea de salida (que es lo quedir /b
hace, si la memoria funciona), use la-1
opción, que en realidad está implícitamente activa cuando stdout no está conectado a una terminal, como cuando se envía a un archivo de salida o tubería.Listado del contenido de algún directorio, sin subdirectorios
Me gusta usar
ls
opciones, por ejemplo:Alguna vez
--color
y todas las demás. (Verls --help
)Listado de todo menos carpetas
Esto mostrará archivos, enlaces simbólicos, dispositivos, tuberías, sockets, etc.
entonces
find /some/path -maxdepth 1 ! -type d
se podría ordenar por fecha fácilmente:
find /some/path -maxdepth 1 ! -type d -exec ls -hltrF {} +
Listado de archivos solamente:
o
find /some/path -maxdepth 1 -type f
ordenados por tamaño:
find /some/path -maxdepth 1 -type f -exec ls -lSF --color {} +
Evite la lista de entradas ocultas :
Para no mostrar entradas ocultas, donde el nombre comienza con un punto, puede agregar
! -name '.*'
:find /some/path -maxdepth 1 ! -type d ! -name '.*' -exec ls -hltrF {} +
Entonces
Puede reemplazar
/some/path
por.
para listar para el directorio actual o..
para el directorio principal .fuente
También puede usar
ls
congrep
oegrep
y ponerlo en su perfil como un alias:ls -l | egrep -v '^d' ls -l | grep -v '^d'
fuente
buscar archivos: ls -l / home | grep "^ -" | tr -s '' | cortar -d '' -f 9
buscar directorios: ls -l / home | grep "^ d" | tr -s '' | cortar -d '' -f 9
buscar enlaces: ls -l / home | grep "^ l" | tr -s '' | cortar -d '' -f 9
tr -s '' convierte la salida en un archivo delimitado por espacios, el comando de corte dice que el delimitador es un espacio y devuelve el noveno campo (siempre el nombre de archivo / nombre de directorio / nombre de enlace).
¡Uso esto todo el tiempo!
fuente
{ find . -maxdepth 1 -type f | xargs ls -1t | less; }
agregado
xargs
para que funcione, y se usa en-1
lugar de-l
mostrar solo nombres de archivo sinls
información adicionalfuente
find -printf0 '...' | sort -z
Solo agrego a la respuesta de carlpett. Para una vista más útil de los archivos, puede canalizar la salida a ls.
find . -maxdepth 1 -type f|ls -lt|less
Muestra los archivos modificados más recientemente en un formato de lista, bastante útil cuando ha descargado muchos archivos y desea ver una versión ordenada de los más recientes.
fuente
ls
no lee la entrada estándar, por lo que es inútil canalizar nada als
. ¿Se ha perdidoxargs
?find
comando en esta respuesta se ignora por completo ; el comando general es el mismo quels -lt | less
, que no realiza ningún filtrado de tipo.find
podrías hacerlofind . -maxdepth 1 -type f -ls
. También parece que funciona en Mac OS, aunque creo-maxdepth
y-ls
no están debidamente opciones portátiles."find '-maxdepth'" no funciona con mi versión anterior de bash, por lo tanto, uso:
para f en $ (ls); hacer si [-f $ f]; luego echo $ f; fi; hecho
fuente
for f in $(ls)
es doblemente incorrecto. Podrías arreglar eso confor f in *
pero luego se rompería porque no estás citando el argumentoecho
correctamente.