%EC%9D%84%20%EB%82%A0%EC%A7%9C%20%EB%AA%A9%EB%A1%9D%EC%9C%BC%EB%A1%9C%20%EB%B3%80%ED%99%98.png)
백업이 저장되는 디렉토리가 있습니다. Complete Backup YYYY-MM-DD hh-mm-ss.tar.bz2
내가 찾은 형식은 date
명령에 날짜를 입력하는 데 사용할 수 있습니다 date --date="YY-MM-DD hh:mm:ss"
.
그렇다면 공백으로 구분된 날짜 목록을 어떻게 얻을 수 있습니까? 날짜는 date
형식을 지정하기 위해 호출을 통해 실행되어야 합니다 .
나는 (한 줄에 하나의 항목) 형식으로 목록을 제공하는 이 명령을 생각해 냈습니다 YYYY-MM-DD hh-mm-ss
. 그렇다면 어떻게 형식을 올바르게 지정하고 각각에 날짜를 추가하고 공백으로 구분합니까?
dir backups/ | grep '[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]\\ [0-9][0-9]-[0-9][0-9]-[0-9][0-9]\.tar\.bz2$' | sed 's/\\//g' | sed 's/\.tar\.bz2//g' | sed 's/Complete Backup //g'
참고: 출력은 선택 루프에서 사용되므로 날짜에 속한 모든 공간을 이스케이프해야 합니다.
답변1
다음은 날짜 형식을 다시 지정합니다.
dir -1 backups | awk '/Complete\\ Backup\\ .*\.tar\.bz2/ { gsub(/\\/, ""); sub(/Complete Backup /, ""); sub(/.tar.bz2/, ""); gsub(/-/, " "); print strftime("%c", mktime($0)); }'
이를 선택 항목에 통합하는 방법은 다음과 같습니다.
OIFS="$IFS"; IFS=$'\n'; set -- $(dir -1 backups | awk '/Complete\\ Backup\\ .*\.tar\.bz2/ { gsub(/\\/, ""); sub(/Complete Backup /, ""); sub(/.tar.bz2/, ""); gsub(/-/, " "); print strftime("%c", mktime($0)); }'); IFS="$OIFS"
select date in "$@"; do echo "$date"; done
날짜를 정렬하는 버전은 다음과 같습니다.
OIFS="$IFS"
IFS=$'\n'
set -- $(
dir -1 backups |
awk '/Complete\\ Backup\\ .*\.tar\.bz2/ \
{
gsub(/\\/, "");
sub(/Complete Backup /, "");
sub(/.tar.bz2/, "");
gsub(/-/, " ");
VAL[NR] = mktime($0);
}
END \
{
for ( i = asort(VAL); i > 0; i-- )
{
print strftime("%a %b %d %T %Z %Y", VAL[i]);
}
}'
)
IFS="$OIFS"
select date in "$@"
do
echo "$date"
done
답변2
여기 있어요:
dates=($(for i in backups/*.tar.bz2;do #Glob eliminates need to list all files
date=${i/Complete Backup /} #Remove "Complete Backup "
date=${date%%.*} #Remove ".tar.bz2"
date=${date/ /,} #Substitue , for space
echo $date #Echo the date for sed
done|sed -e 's/\([0-9]\+\)-\([0-9]\+\)-\([0-9]\+\)$/\1:\2:\3/'|sort -r|xargs echo))
select date in ${dates[@]};do
echo "$date"
done
한 가지 더: 이것을 루프에 사용하는 경우 select
공백으로 구분된 날짜를 어떻게 구별할 수 있나요? 날짜와 시간을 구분하기 위해 공백을 사용한다는 뜻이므로 혼란스러울 수 있습니다.
편집하다
- 귀하의 의견이 그런 방식으로 정렬해야 한다고 제안했기 때문에 최신 항목부터 오래된 항목까지 날짜 정렬을 추가했습니다.
select
날짜 및 시간 쌍이 새 항목과 구별될 수 있도록 날짜 및 시간을 쉼표로 구분하는 코드가 추가되었습니다 .전체 데이터를로 래핑하여 날짜를 배열에 저장한 다음 루프를 반복하여select
루프select
루프가 다시 실행될 때마다 날짜를 다시 구문 분석할 필요가 없도록 합니다.