파일이 생성된 월을 표시합니다(생성 사분면별로 파일 그룹화).

파일이 생성된 월을 표시합니다(생성 사분면별로 파일 그룹화).

파일이 생성된 사분면별로 파일을 그룹화하려고 합니다. 내가 원하는 것은 파일이 언제 생성되었는지 확인하는 것입니다. 예를 들어 다음과 같은 파일이 있는 경우:

-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) 정렬하려면-Uls사분면을 누른 다음 같은 사분면에 있는 파일 이름을 누르세요.

byquadrant함수는 사분면 번호와 원본 파일 이름으로 구성된 문자열을 반환합니다 -. 이는 oglob om을 얻기 위해 glob 한정자를 사용하도록 zsh에 지시하는 것입니다 o+<functionname>.

심볼릭 링크의 경우 zshs stat(예: GNU date -r)는 기본적으로 심볼의 mtime을 검색합니다.표적심볼릭 링크. -L심볼릭 링크 자체의 런타임을 원하면 이를 추가하세요.

GNU의 구현을 사용하려면 stat( zsh몇 년이 지났고 GNU와도 호환되지 않으며 수십 년 이전 find이고 -printf사용성이 훨씬 낮음) 이를 타임스탬프 형식(iso8601 또는 원시 에포크 시간)으로 내보내야 합니다. 그렇지 않으면 월을 추출합니다.

예를 들어 dateGNU를 다시 사용할 수 있습니다.

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)가 있지만, 문서로는 덜 유용하다고 생각했습니다.만들다시간 비율마지막 수정(생성시간으로 볼 수 있음)콘텐츠파일).

관련 정보