파일이 생성된 사분면별로 파일을 그룹화하려고 합니다. 내가 원하는 것은 파일이 언제 생성되었는지 확인하는 것입니다. 예를 들어 다음과 같은 파일이 있는 경우:
-rwxr-xr-x 1 root wheel 208 Aug 30 16:24 q.sh
나는 출력이 생성된 달만 출력되기를 원합니다. 이 경우에는 8
.
이 값을 계산한 후에는 이를 정렬할 간단한 사례 설명에 넣을 수 있습니다. 현재 다음과 같은 결과를 얻었습니다.
#FILE_DATE would be the value I figure out above
case $FILE_DATE in
[1-3])
echo "Quadrant 1"
;;
[4-6])
echo "Quadrant 2"
;;
[7-9])
echo "Quadrant 3"
;;
[10-12])
echo "Quadrant 4"
;;
esac
stat
해당 명령과 필터링된 출력을 사용해 보았지만 ls
아직 이 작업을 안정적으로 수행하는 방법을 찾지 못했습니다.
어떤 도움이라도 대단히 감사하겠습니다.
감사해요!
답변1
GNU를 사용하면 date
다음을 수행할 수 있습니다.
quadrant=$(( $(date -r "$file" +'(%-m - 1) / 3 + 1') ))
얻기 위해서는사분면파일이 마지막으로 수정된 위치입니다.
전역 정렬 순서를 zsh
추가할 수 있습니다 .byquadrant
zmodload zsh/stat
byquadrant() {
local month
stat -A month -F %-m +mtime -- ${1-$REPLY}
REPLY=$(( (month - 1) / 3 + 1 ))-$REPLY
}
다음과 같이 사용됩니다:
ls -ldU -- *(o+byquadrant)
예를 들어(여기서는 GNU를 사용하여 자체 정렬을 비활성화함 ls
) 정렬하려면-U
ls
사분면을 누른 다음 같은 사분면에 있는 파일 이름을 누르세요.
이 byquadrant
함수는 사분면 번호와 원본 파일 이름으로 구성된 문자열을 반환합니다 -
. 이는 o
glob om을 얻기 위해 glob 한정자를 사용하도록 zsh에 지시하는 것입니다 o+<functionname>
.
심볼릭 링크의 경우 zsh
s stat
(예: GNU date -r
)는 기본적으로 심볼의 mtime을 검색합니다.표적심볼릭 링크. -L
심볼릭 링크 자체의 런타임을 원하면 이를 추가하세요.
GNU의 구현을 사용하려면 stat
( zsh
몇 년이 지났고 GNU와도 호환되지 않으며 수십 년 이전 find
이고 -printf
사용성이 훨씬 낮음) 이를 타임스탬프 형식(iso8601 또는 원시 에포크 시간)으로 내보내야 합니다. 그렇지 않으면 월을 추출합니다.
예를 들어 date
GNU를 다시 사용할 수 있습니다.
quadrant=$(( $(
set -o pipefail
stat -c%y -- "$file" | date -f - +'(%-m - 1) / 3 + 1'
) ))
GNU는 stat
기본적으로 대상(및 그 반대 zsh
stat
)이 아닌 심볼릭 링크의 런타임을 가져옵니다. -L
변경하세요.
또한 이름이 인 경우에는 작동하지 않습니다 -
.
최신 버전의 Linux에서 최신 버전의 GNU의 경우 다음을 얻는 대신 stat
사용할 수도 있습니다.%w
%y
출생 시간사용 가능한 문서( ls
최신 버전의 GNU에 표시됨 ls -l --time=birth
)가 있지만, 문서로는 덜 유용하다고 생각했습니다.만들다시간 비율마지막 수정(생성시간으로 볼 수 있음)콘텐츠파일).