Si escribo:
ls source/*
source/fonts:
fontello
source/images:
bg1.png eng.png fra.png
Obtengo la lista de archivos, agrupados por nombres de carpeta. ¿Cómo puedo simplemente obtener la lista de nombres de archivo?
ls source/*
source/fonts/fontello
source/images/bg1.png
source/images/eng.png
source/images/fra.png
Gracias
find
mal; particularmente, si estás corriendofor file in $(find ...)
, has golpeado uno de ellos).Respuestas:
No parece posible sin la alteración de la salida, pero aquí hay una forma alternativa fácil:
O (específico para GNU find), solo para obtener archivos en la profundidad de su pregunta:
(o si desea directorios como el que
ls
le da, elimine-type f
)fuente
Simplemente puede apegarse a ls si agrega algunos psychedlics (
ls -d
):fuente
find
siendo una bestia gorda.Te puede interesar "el hombre pobre
find
":shopt -s
establece las opciones de shell con nombre. Laglobstar
opción se define como sigue en bash (1) :Entonces, después de haberlo hecho
shopt -s globstar
, cualquiera de los siguientes comandos:producirá la salida:
Desafortunadamente, esto también incluye los nombres de directorio. Podría ayudarte un poco saber que
producirá la salida:
es decir, solo los nombres de directorio. Es posible redirigir la salida de uno de la primera serie de comandos a un archivo, redirigir la salida de los anteriores a un segundo archivo, y luego usar
comm
,diff
o algo similar, para restar el segundo archivo desde la primera, dejando sólo la llanura archivos (no directorios). Pero no hagas eso.Otro enfoque (que no es mucho mejor) es
La
--file-type
opción le indicals
que muestre un/
al final de cada nombre de directorio (y otros caracteres al final de otros tipos de archivos (especiales)), como este:y luego
grep -v '/$'
elimina las líneas que terminan con/
; es decir, los nombres de directorio. Desafortunadamente, POSIX--file-type
no especifica la opción . Si su versión dels
no lo admite, úselo-F
. Es como,--file-type
excepto que también muestra un*
al final de los nombres de los archivos ejecutables, lo que algunas personas encuentran molesto. Puedes eliminarlos consed
:Si desea hacer algo con todos los archivos (y solo los archivos), puede hacerlo
Notas:
ls
está dando salida a un terminal, y no es en-l
( l modo de ong), escribe varios nombres por línea (a menos que los nombres son muy largos). Puede forzarlo a escribir un nombre por línea especificando-1
(uno) o redirigiendo la salida a un archivo o una tubería.--
losls
comandos ya que está enumerando un directorio cuyo contenido creó. Debe usarlo cuando se enumera*
en un directorio desconocido, como protección contra los nombres de archivo que comienzan con-
.ls
.globstar
opción de shell parece no estar definida por POSIX. (De hecho, no estoy seguro de que POSIX reconozca las opciones de shell). Si bien parece ser unbash
ismo, tenga cuidado, puede que no esté presente en todas las versiones de bash.Si
fonts
oimages
tiene subdirectorios,**
mostrará una lista de todos ellos, de forma recursiva, hasta el fondo. Una forma (algo confusa y poco confiable) de limitar la profundidad esque elimina líneas que contienen tres o más
/
caracteres.fuente