ファイルが配列に配置される順序の制御

ファイルが配列に配置される順序の制御

私はタイムスタンプを持つ複数のファイルをインポートして配列に保存し、Muttが処理して私に電子メールで送信するスクリプトを持っています。私の問題は、ファイルがランダムに配列に配置され、混乱した方法で私に電子メールで送信されることです。これらのファイルが配列に配置される順序を制御する方法はありますか?日付で並べ替えたいです。これは私が使用するスクリプトです。

#!/bin/bash
date=$(date +%F)
recipients="[email protected]"
body="Found these files:"
mapfile -t files < <(find /my/directory -name '*.jpg' -newermt '-15 seconds' -not -newermt '-2 seconds')

if [ -z "$files" ]; then
body="No files were found"
echo "$body" | mutt -s "Error on $TODAY" $recipients
fi

echo "$body" | mutt -s "Files found on $date" -a "${files[@]}" -- $recipients
echo "${files[@]}"

ベストアンサー1

zsh代わりに使用してくださいbash。ソートを定義できます(デフォルトでは名前ベース)。

files=(/my/directory/**/*.jpg(.NDms+2ms-15))

これにより、改行を含むファイル名に関連する問題も回避されます(ただし、bash-4.4サポートを使用できますmapfile)。-d ''find -print0

種類(ああ注文時間変更:

files=(/my/directory/**/*.jpg(.NDms+2ms-15om))

findGNUとGNUの同様の(名前による)順序を取得するには、次の手順を実行しますsort

find /my/directory -name '*.jpg' \
                   -type f \
                   -newermt '-15 seconds' \
                   ! -newermt '-2 seconds' \
                   -print0 |
  sort -zt/ -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 -k6,6 -k7,7 -k8,8 \
            -k9,9 -k10,10 -k11,11 -k12,12 -k13,13 -k14,14

修正時間順の場合:

find /my/directory -name '*.jpg' \
                   -type f \
                   -newermt '-15 seconds' \
                   ! -newermt '-2 seconds' \
                   -printf '%T@:%p\0' |
  sort -zn |
  sed -z 's/[^:]*://#'

| tr '\0' '\n'Bashのリポジトリに追加スカラーreadarray(配列ではない)変数またはmapfile使用/なし-d ''(改行に分割、この場合はNUL区切りレコードの代わりに改行区切りレコードですべての操作を実行できます)。

readarray -d '' array < <(find...)bash 4.4以上zshまたはarray=(${(0)"$(find...)"})

おすすめ記事