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/*
-1
opción garantiza que obtenga un nombre de archivo por líneals
detecta si la salida es a un archivo o terminal.find
respuesta 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
. Estofind
recurre a los subdirectorios, para los no recursivos debe agregar-maxdepth 1
antes del-type
argumento.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
.ls
solo imprime esa lista aquí, así que también podrías hacer:fuente
printf
tiene la ventaja adicional de que no obtendrá un error de "línea de comando demasiado larga" si tiene miles de archivos, yaprintf
que no se ejecuta como un proceso separado.printf
no está integradopdksh
y algunos de sus derivados o la mayoría de las versiones del shell Bourne. Un inconveniente en comparación con estols -d
es que si no hay un archivo no oculto allí, se imprimirá/path/to/*
yls
le dará un error acerca de que ese archivo no existe.Para ver solo archivos regulares:
fuente
Puedes usar
realpath
oreadlink
:xargs
construir 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 directory
también obtiene la ruta absoluta en caso de que desee alimentar los archivosxargs
u otro comandolas opciones que significan:
Para instalar
tree
:sudo apt install tree
en Ubuntu / Debiansudo yum install tree
en CentOS / Fedorasudo zypper install tree
en OpenSUSEfuente
sudo apt install tree
en Ubuntusudo yum install tree
en CentOSsudo zypper install tree
en OpenSUSEbrew install tree
en MacEn un entorno Linux anterior, tenía un
resolve
comando 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