次のコードがあるとしましょう。
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
あなたが達成しなければならないタスクを実行できることを確認することをお勧めします。