найти мое недопонимание по поводу этого маленького фрагмента скрипта оболочки

найти мое недопонимание по поводу этого маленького фрагмента скрипта оболочки

На самом деле у меня есть папка, содержащая несколько подпапок с большим количеством изображений в каждой.

Я пытаюсь собрать все имена файлов в каждой подпапке в текстовом файле (filesNames.txt) в этой подпапке в следующем виде:

Абсолютный/путь/к/каждому/файлу/имя файла

Итак, я написал скрипт в родительской папке:

#!/bin/sh

for dir in "$PWD"/*/; do
arr=( "$dir"* )
cd "$dir"
printf "%s 1\n" "$PWD/${arr[@]##*/}" > "$dir"filesNames.txt
cd ..
done

Моя проблемав том, что:

У меня есть абсолютный адрес только для первого файла в каждой подпапке. Для остальных есть только имена файлов без абсолютного адреса:

 /run/media/parent_folder/subfolder/filename1.png
 filename2.png
 filename3.png
 ...

Я думаю, это связано с$ПВДпеременная, которую я перебираю только один раз для каждой подпапки. Как мне изменить скрипт в подходящей форме?

Заранее спасибо.

решение1

Одна findкоманда выведет все файлы с абсолютным путем

find $(pwd) -type f

решение2

А если вы хотите сделать это с помощью чистого скрипта оболочки и не хотите использовать find, попробуйте этот небольшой скрипт:

#!/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 

Сохраните, например, как recursive-loop и выполните в папке, в которой вы хотите выполнить поиск. Он будет делать то же самое, что find или другие рекурсивные механизмы, но с использованием цикла for, и вы можете настроить его под свои нужды!

$./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
(...)

Связанный контент