
최신 파일의 크기가 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 한정자에 모두 추가하세요. 비정규 파일(디렉토리, 심볼릭 링크, 장치...)을 고려하려면 제거하십시오..
아이디어는 다음 두 글로브를 모두 확장하는 것입니다.
- 수정 시간별 로 정렬된 숨겨지지 않은 일반(
.
) 파일 목록은 하나( )로 제한됩니다.o
m
[1]
- 동일하지만
L
ength가 보다 큰(+
) 파일로 제한됩니다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 이상입니다)