최신 파일의 크기가 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 한정자에 모두 추가하세요. 비정규 파일(디렉토리, 심볼릭 링크, 장치...)을 고려하려면 삭제하세요..
아이디어는 다음 두 가지 범위를 확장하는 것입니다.
.
o
수정 시간별 로 정렬된 숨겨지지 않은 일반( ) 파일 목록m
, 하나만([1]
).L
동일하지만 길이가 ( )보다 엄격하게 큰+
파일 에만 해당됩니다2097152
(그러나N
ullGlob이 활성화되어 있으므로 일치하는 항목이 없어도 치명적인 오류는 아닙니다).
우리의 조건은 두 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를 초과합니다.)