En realidad, tengo una carpeta que contiene varias subcarpetas con muchas imágenes en cada una.
Estoy intentando reunir todos los nombres de los archivos en cada subcarpeta en un archivo de texto (filesNames.txt) en esa subcarpeta en forma de:
Absoluta/ruta/a/cada/archivo/Nombre del archivo
Entonces, escribí un script en la carpeta principal:
#!/bin/sh
for dir in "$PWD"/*/; do
arr=( "$dir"* )
cd "$dir"
printf "%s 1\n" "$PWD/${arr[@]##*/}" > "$dir"filesNames.txt
cd ..
done
Mi problemaes eso:
Tengo la dirección absoluta sólo para el primer archivo de cada subcarpeta. Para el resto sólo hay nombres de archivos sin dirección absoluta:
/run/media/parent_folder/subfolder/filename1.png
filename2.png
filename3.png
...
Creo que está relacionado con$PWDvariable que la repito solo una vez para cada subcarpeta. ¿Cómo puedo cambiar el script en una forma adecuada?
Gracias de antemano.
Respuesta1
Un solo find
comando generará todos los archivos con ruta absoluta
find $(pwd) -type f
Respuesta2
Y si quieres hacerlo usando un script de shell puro y no quieres usar buscar, prueba este pequeño:
#!/bin/bash
#Simple bash recursive loop search - Luciano A. Martini =)
nextdir(){
for f in *; do
if [ -d "$f" ] && [ ! -L "$f" ]; then
#echo "Inside folder: $PWD/$f"
nextdir "$f"
cd ..
continue
else
echo "$PWD/$f"
fi
done
}
#call the function for the first time...
nextdir
Guarde, por ejemplo, como bucle recursivo y ejecútelo en la carpeta donde desea realizar la búsqueda. Hará exactamente lo que hace el mecanismo de búsqueda u otros mecanismos recursivos, pero utilizando un bucle for, ¡y podrá personalizarlo según sus necesidades!
$./recursive-loop
/home/luciano/readme.txt
/home/luciano/images/a.bmp
/home/luciano/texts/a.txt
/home/luciano/texts/b.txt
/home/luciano/texts/music/lyrics.txt
(...)