Помогите мне, пожалуйста, найти мое недоразумение об этом маленьком фрагменте скрипта

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

Я пытаюсь собрать все имена файлов в каждой подпапке в текстовом файле (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 ... 

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

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

2 Solutions collect form web for “Помогите мне, пожалуйста, найти мое недоразумение об этом маленьком фрагменте скрипта”

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

 find $(pwd) -type f 

И если вы хотите сделать это с помощью чистого сценария оболочки и не хотите использовать 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 

Сохраните, например, как рекурсивный цикл и выполните в папке, которую вы хотите выполнить. Он будет делать именно то, что находит или другие рекурсивные механизмы, но использует цикл 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 (...) 
  • Список файлов в иерархии каталога
  • Javascript BTOA против base64 в bash?
  • Еще одна команда без ключа
  • Добавить путь к $ PATH, если он еще не был в $ PATH
  • Переименование файлов на основе имен каталогов
  • Использование xargs с git
  • Используя sed с herestring (<<<) и прочитайте -a
  • значение {0 , 1 *, 2 *}
  • Есть ли способ слушать процесс?
  • Как найти уникальное слово в одной строке
  • Проблемы с basename в цикле
  • Linux и Unix - лучшая ОС в мире.