나는 타임스탬프가 있는 여러 파일을 가져와서 배열에 저장하고 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...)"})
.