Necesito un archivo (preferiblemente un archivo .list) que contenga la ruta absoluta de cada archivo en un directorio.
Ejemplo dir1: file1.txt file2.txt file3.txt
listOfFiles.list:
/Users/haddad/dir1/file1.txt
/Users/haddad/dir1/file2.txt
/Users/haddad/dir1/file3.txt
¿Cómo puedo lograr esto en Linux / Mac?
command-line
ls
filenames
arabian_albert
fuente
fuente

ls -d -1 $PWD/*-1opción garantiza que obtenga un nombre de archivo por línealsdetecta si la salida es a un archivo o terminal.findrespuesta de @Andy Dalton es una mejor solución, ya que no fallará sin importar cuántos archivos se enumeren.Puedes usar find. Suponiendo que solo desea archivos normales, puede hacer:
Puede ajustar el parámetro de tipo según corresponda si desea otros tipos de archivos.
fuente
ls. Estofindrecurre a los subdirectorios, para los no recursivos debe agregar-maxdepth 1antes del-typeargumento.Tenga en cuenta que en:
Es el shell que calcula la lista de archivos (no ocultos) en el directorio y le pasa la lista
ls.lssolo imprime esa lista aquí, así que también podrías hacer:fuente
printftiene la ventaja adicional de que no obtendrá un error de "línea de comando demasiado larga" si tiene miles de archivos, yaprintfque no se ejecuta como un proceso separado.printfno está integradopdkshy algunos de sus derivados o la mayoría de las versiones del shell Bourne. Un inconveniente en comparación con estols -des que si no hay un archivo no oculto allí, se imprimirá/path/to/*ylsle dará un error acerca de que ese archivo no existe.Para ver solo archivos regulares:
fuente
Puedes usar
realpathoreadlink:xargsconstruir y ejecutar líneas de comando desde la entrada estándar.realpath: devuelve el nombre de ruta absoluto canonicalizadoreadlink: valor de lectura de un enlace simbólicofuente
dpkg -S /usr/bin/realpath. Mira esto .Otra forma con
tree, no mencionada aquí, es recursiva y, a diferencia de find o ls no tiene ningún error (como:)Permission denied,Not a directorytambién obtiene la ruta absoluta en caso de que desee alimentar los archivosxargsu otro comandolas opciones que significan:
Para instalar
tree:sudo apt install treeen Ubuntu / Debiansudo yum install treeen CentOS / Fedorasudo zypper install treeen OpenSUSEfuente
sudo apt install treeen Ubuntusudo yum install treeen CentOSsudo zypper install treeen OpenSUSEbrew install treeen MacEn un entorno Linux anterior, tenía un
resolvecomando que estandarizaría las rutas, incluida la creación de una ruta relativa en una ruta absoluta. No puedo encontrarlo ahora, así que tal vez fue escrito por alguien de esa organización.Puede crear su propio script utilizando funciones en las bibliotecas estándar de Python o Perl (y probablemente también en otros idiomas).
resolve.py:resolve.pl:Entonces, resolverías tu problema con:
Con este comando, también puedes hacer cosas como esta:
fuente