Quiero crear una lista de todos los archivos en un directorio, sin enumerar ninguno de los subdirectorios que residen en ese mismo directorio, e imprimir esa lista en un nuevo archivo.
ls -d * > filelist
creará una lista de todos los archivos en el directorio actual, pero también enumera los subdirectorios en el directorio actual. Probé el find
comando usando la -maxdepth 1
opción; sin embargo, el formato de salida es un problema, ya que find también imprime la ruta junto con los nombres de los archivos.
Si alguien puede decirme quizás otro comando u opciones para usar que produzca una lista de salida de solo los archivos en un directorio y no los nombres de los subdirectorios o sus contenidos, lo agradecería.
ls -d *
solo enumere los archivos y carpetas en la carpeta actual, excluyendo los archivos / carpetas ocultos aquí;Respuestas:
Solución basada en el hallazgo:
Solución basada en bash:
La solución basada en bash te dará todo lo que no sea un directorio; incluirá cosas como tuberías con nombre (probablemente quieras esto). Si desea específicamente solo archivos , use el
find
comando o uno de estos:Si va a usar esto regularmente, por supuesto, puede poner esto en un alias en algún lugar de su
~/.bashrc
:Como notó en los comentarios que en realidad está en OSX en lugar de Ubuntu, sugeriría que la próxima vez dirija sus preguntas a Apple o más sitios generales de intercambio de pila de Unix y Linux .
fuente
Listar solo nombres de archivos:
Listar solo directorios:
grep -v -e ^ $ es eliminar líneas en blanco del resultado.
Más detalles :
ls -p flag es poner '/' al final del nombre del directorio, -R flag es para búsqueda recursiva, -l para listar con información, -a para listar todo (incluyendo archivos ocultos) con información, grep El indicador -v es para inversión de resultados y el indicador -e para coincidencia de expresiones regulares.
fuente
Para enumerar solo archivos normales:
Con enlaces simbólicos incluidos:
Donde el primer carácter de la lista describe el tipo de archivo,
-
significa que es un archivo normal, ya que el enlace simbólico esl
.Debian / Ubuntu
Imprima los nombres de todos los archivos coincidentes (incluidos los enlaces):
Con caminos absolutos:
Imprima los nombres de todos los archivos
/etc
que comienzan conp
y terminan cond
:fuente
Otra solución más, ingenuamente corta, que funcionó para mí:
fuente
ls -alR |grep -E '^-'
Sugeriría usar find y simplemente eliminar el nombre del directorio de la salida si es necesario:
fuente
-maxdepth 1
debe aparecer antes de cualquier filtro, y puede lograr este resultado sin usarsed
con la-printf
opción, es decir:find . -maxdepth 1 -type f -printf '%f\n'
(esto será más eficiente que usar un programa adicional).Otra opción posible es
El
--file-type
pone un / al final de las carpetas (pero también una @ al final de los enlaces simbólicos.The grep -v '/'
Elimina los subdirectorios (porque ahora terminan con un '/'). Elsed s/@$//
elimina ese @. El -1 imprime un archivo por línea para que grep -v funcione correctamente.fuente
-1
no importa a grep no lo necesitas; si desea incluir archivos ocultos, use la-a
opción enls
ls -F | grep -v '/' | sed s/[@*]$// > filelist