この小さなシェルスクリプトについての私の誤解を見つけてください

この小さなシェルスクリプトについての私の誤解を見つけてください

実際、私は複数のサブフォルダを含むフォルダを持っており、そのサブフォルダにはそれぞれにたくさんの画像が含まれています。

各サブフォルダー内のすべてのファイルの名前を、そのサブフォルダー内のテキスト ファイル (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変数をサブフォルダーごとに 1 回だけ反復処理します。スクリプトを適切な形式で変更するにはどうすればよいですか?

前もって感謝します。

答え1

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

関連情報