実際、私は複数のサブフォルダを含むフォルダを持っており、そのサブフォルダにはそれぞれにたくさんの画像が含まれています。
各サブフォルダー内のすべてのファイルの名前を、そのサブフォルダー内のテキスト ファイル (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
(...)