FORループによって提供されるファイルのタイムスタンプを取得します。

FORループによって提供されるファイルのタイムスタンプを取得します。

私の目標は、特定の$ devicesで$filesを見つけ、各ファイルのタイムスタンプに対応する名前を持つ1つ以上のフォルダに保存することです。タイムスタンプを取得するにはstatを使用したいと思います。

echo "$files" とは異なり、stat は各ファイルを個別に処理しません。代わりに""を使用すると、すべてのファイルを一度に処理するようです。

引用を改善する方法に関する提案や、私が望むように統計を取得する方法に関する他のヒントはありますか?助けてくれてありがとう。

#!/bin/bash
for devices in "$(ls /media/*/)";
  do
    for files in "$(find /media/*/$devices -iname *.jpg)";
      do
        echo "$files"   # prints all files in separate lines
        stat "$files"   # seems to process all files at once
        stat $files     # splits file paths at spaces
      done
  done

ベストアンサー1

問題はstatループのソースデータではなく、ループのソースデータですfor。すべて引用符で囲むので、単一の長い単一のエンティティになります。

この問題を解決するには、周囲の引用符を削除します。

for files in $(find /media/*/$devices -iname "*.jpg");

すべてのファイルまたはパスにスペースがない場合に機能します。ただし、スペースや奇妙なファイル名(引用符や改行文字などのファイル名など)も処理できる、よりエレガントなソリューションがあります。

while IFS= read -r -d '' file; do
    # operations on each "$file" here
done < <(find /media/*/$devices -type f -iname *.jpg -print0)

おすすめ記事