최신 파일 크기 테스트

최신 파일 크기 테스트

최신 파일의 크기가 2MB보다 큰지 확인하고 싶습니다.

test $(ls -st | head -n2 | tail -n1 | awk '{print $1}') -gt 2097152 && echo "true"

이를 수행하는 더 효율적이고 우아한 방법이 있습니까?

나는 awk의 출력을 추가로 파이핑하려고 시도했습니다.

| test {} -gt 2097152

하지만 얻을

bash: 테스트: {}: 정수 표현식이 필요합니다.

그 다음에

| test {}>"2097152"

수익률은 항상 "참"이므로 이 구조를 생각해 냈습니다.

test $(...) -gt 2097152

답변1

ls최신 파일을 가져오는 것보다 더 나은 방법이 있을 수 있지만 수행하는 작업의 대부분은 awk에서 수행할 수 있습니다.

ls -st | awk 'NR == 2 && $1 > 2097152 {print "true"}'
  • NR == 2- 두 번째 줄에
  • $1 > 2097152- 첫 번째 열이 2097152보다 큰 경우

답변2

그리고 zsh:

set -- *(.om[1]) *(N.L+2097152om[1])
if [[ $1 = $2 ]]; then
  printf '%s\n' "The apparent size of the newest non-hidden regular file in the current" \
                "directory ($1) is strictly greater than 2MiB."
fi

숨겨진 디렉터리를 포함하려면 D두 glob 한정자에 모두 추가하세요. 비정규 파일(디렉토리, 심볼릭 링크, 장치...)을 고려하려면 삭제하세요..

아이디어는 다음 두 가지 범위를 확장하는 것입니다.

  1. .o수정 시간별 로 정렬된 숨겨지지 않은 일반( ) 파일 목록 m, 하나만( [1]).
  2. L동일하지만 길이가 ( )보다 엄격하게 큰 +파일 에만 해당됩니다 2097152(그러나 NullGlob이 활성화되어 있으므로 일치하는 항목이 없어도 치명적인 오류는 아닙니다).

우리의 조건은 두 glob이 동일한 파일로 확장된다는 것입니다.

ls -s파일 크기는 보고되지 않고 디스크 사용량(구현 ls및/또는 환경에 따라 512바이트 단위 수, KiB 또는 기타 형식으로 표시됨) 에 유의하세요 . ls다음 이내의 보고서 파일 크기출력 형식( ls -l또는 ls -n(또는 일부 구현에서는 -o/ -g)).

zsh또 다른 옵션은 내장된 기능을 사용하여 stat최신 파일 크기(또는 디스크 사용량)를 얻는 것입니다.

zmodload zsh/stat
if
  stat -LH s -- *(.om[1]) &&
    ((s[size] > 2097152))
then
  printf '%s\n' "The apparent size of the newest non-hidden regular file in the current" \
                "directory ($1) is strictly greater than 2MiB."
fi

또는:

zmodload zsh/stat
if
  stat -LH s -- *(.om[1]) &&
    ((s[blocks] > 2097152))
then
  printf '%s\n' "The newest non-hidden regular file in the current directory" \
                "($1) uses more than 2097152 512-byte units of disk space."
fi

(즉, 디스크 사용량이 1GiB를 초과합니다.)

관련 정보