¿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 fEl uso de la
-maxdepth 1opció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
finden mac, no tiene-typeni-maxdepthopciones.-typey-maxdepthno 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 fevitar el./prefijo en los nombres de los archivos de salida; también tenga en cuenta el-maxdepthde0, no1), siempre que todo lo que necesite sean los nombres de los archivos en orden alfabético . Si desea lolsque 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 fla 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-Lpara hacerlo.ls -p le permite mostrar / después del nombre de la carpeta, que actúa como una etiqueta que puede eliminar.
fuente
lsademás defind, ya que el último devuelve rutas relativas y el primero solo nombres de archivo. Utilice la herramienta adecuada para el trabajo.findanswer (find . -maxdepth 1 -type f) basado en carlpett funciona en principio, pero nols./lses 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
findinvariablemente también encuentra elementos ocultos , mientras quelsel comportamiento depende de la presencia o ausencia de las opciones-ao-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 fileslsmuchas otras opciones de clasificación / formato de salida.La respuesta de Hans Roggeman
ls+grepes pragmática, pero lo bloquea para usar el-lformato de salida largo ( ) .Para hacer frente a estas limitaciones que escribió el
fls( f iltering ls ) de utilidad ,lsal mismo tiempo que proporciona capacidad de filtrado de tipos ,farchivos,ddirectorios ylenlaces simbólicos antes de una lista delsargumentos (ejecutarfls --helpofls --manpara 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
npmfunciona en todas las plataformas y es fácil de instalar; tratarcurl -L https://git.io/n-install | bashCon Node.js instalado, instale de la siguiente manera:
Nota :
Si lo necesita
sudodepende de cómo haya instalado Node.js / io.js y de si ha cambiado los permisos más tarde ; si recibe unEACCESerror, vuelva a intentarlo consudo.El
-gasegura global de la instalación y se necesita para ponerflsen su sistema de$PATH.Instalación manual
bashscript comofls.chmod +x fls.$PATH, como/usr/local/bin(macOS) o/usr/bin(Linux).fuente
-1(el número uno);lsen 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 /bhace, si la memoria funciona), use la-1opció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
lsopciones, por ejemplo:Alguna vez
--colory 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 dse 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 fordenados 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/pathpor.para listar para el directorio actual o..para el directorio principal .fuente
También puede usar
lscongrepoegrepy 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
xargspara que funcione, y se usa en-1lugar de-lmostrar solo nombres de archivo sinlsinformación adicionalfuente
find -printf0 '...' | sort -zSolo 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|lessMuestra 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
lsno lee la entrada estándar, por lo que es inútil canalizar nada als. ¿Se ha perdidoxargs?findcomando en esta respuesta se ignora por completo ; el comando general es el mismo quels -lt | less, que no realiza ningún filtrado de tipo.findpodrías hacerlofind . -maxdepth 1 -type f -ls. También parece que funciona en Mac OS, aunque creo-maxdepthy-lsno 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 argumentoechocorrectamente.