На самом деле у меня есть папка, содержащая несколько подпапок с большим количеством изображений в каждой.
Я пытаюсь собрать все имена файлов в каждой подпапке в текстовом файле (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
(...)