find コマンドによる bash for ループの参照項目

find コマンドによる bash for ループの参照項目

次のコードがあるとしましょう。

for i in $(find * -type f -name "*.txt"); do 
  # echo [element by it's index]
done

可能であれば、インデックスで要素にどのようにアクセスできますか?

答え1

注文

$(find * -type f -name "*.txt")

配列ではなく(スペースで区切られた)bashのリストを返すので、実際には「ターゲット」方法で個々の要素にアクセスできません。

bash 配列に変換するには:

filearray=( $(find * -type f -name "*.txt") )

(スペースに注意してください!)

その後、次のように個々のアイテムにアクセスできます。

for ((i=0; i<n; i++))
do
   file="${filarray[$i]}"
   <whatever operation on the file>
done

アイテムの数は次のように検索できます。

n="${#filearray[@]}"

しかし、参考にしてくださいこれがただファイル名に特殊文字(特にスペース)が含まれていない場合に機能します。lsまたはの出力を解析することはお勧めできません。find。あなたの場合は、-execこのオプションがfindあなたが達成しなければならないタスクを実行できることを確認することをお勧めします。

関連情報