整数配列に基づいてファイルのリストをフィルタリングしますか?

整数配列に基づいてファイルのリストをフィルタリングしますか?

という名前の画像がたくさん含まれるフォルダがあります。クリップ01234-randomlongstring.png「、どこ01234ランダムな5桁の数字です。私にも配列があります。」クリップ番号「を整数リストとして使用します。

ここで、「ファイル」の数字に一致するすべてのファイル名を含む「ファイル」リストを作成したいと思います。クリップ番号「アレイ。どうすればいいですか?

結果の出力は、私が作成した現在のリスト(すべてのファイル)と同じ方法で処理できるものでなければなりません。 files=($(printf "%s\n" *.* | sort -V | tr '\n' ' '))

ベストアンサー1

ループで:

shopt -s nullglob

files=()
for number in "${clipnumbers[@]}"; do
    printf -v pattern 'clip%s-*.png' "$number"
    files+=( $pattern )
done

これは数字を繰り返し、各数字のファイル名ワイルドカードパターンを生成します。パターンは、パターンに一致するファイル名を配列に追加するように拡張されますfiles。シェルnullglobオプションを使用すると、一致しないパターンは拡張されないままにするのではなく、何も拡張されません。


使用find(現在のディレクトリの下のすべてのディレクトリで繰り返し、見つかった各ファイルに対していくつかのタスクを実行する場合):

patterns=()
for number in "${clipnumbers[@]}"; do
    printf -v pattern 'clip%s-*.png' "$number"
    patterns+=( -o -name "$pattern" )
done

find . -type f \( "${patterns[@]:1}" \) -exec action-to-perform-on-files {} \;

拡張子リストから最初の文字を削除します:1-opatterns

これは、ファイル検索とファイルに対するいくつかのタスクの実行を組み合わせます。そうだろう失敗する配列に数千の数字が含まれている場合clipnumbers(パラメータリストが長すぎます)。

おすすめ記事