최신 파일의 테스트 크기

최신 파일의 테스트 크기

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

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

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

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

| test {} -gt 2097152

하지만 얻을

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

그 다음에

| test {}>"2097152"

결과는 항상 'true'이므로 구문을 생각해 냈습니다.

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. 수정 시간별 로 정렬된 숨겨지지 않은 일반( .) 파일 목록은 하나( )로 제한됩니다.om[1]
  2. 동일하지만 Length가 보다 큰( +) 파일로 제한됩니다 2097152(그러나 N일치하는 항목이 없어도 치명적인 오류가 되지 않도록 ullGlob을 활성화합니다).

그리고 우리의 조건은 두 글로브가 동일한 파일로 확장되는 경우를 의미합니다.

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 이상입니다)

관련 정보