私はタイムスタンプを持つ複数のファイルをインポートして配列に保存し、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))
find
GNUと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...)"})
。