![디렉토리의 마지막 4개 파일의 크기가 서로 같으면 종료하고 그렇지 않으면 계속 [닫기]](https://linux55.com/image/90966/%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%EC%9D%98%20%EB%A7%88%EC%A7%80%EB%A7%89%204%EA%B0%9C%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%ED%81%AC%EA%B8%B0%EA%B0%80%20%EC%84%9C%EB%A1%9C%20%EA%B0%99%EC%9C%BC%EB%A9%B4%20%EC%A2%85%EB%A3%8C%ED%95%98%EA%B3%A0%20%EA%B7%B8%EB%A0%87%EC%A7%80%20%EC%95%8A%EC%9C%BC%EB%A9%B4%20%EA%B3%84%EC%86%8D%20%5B%EB%8B%AB%EA%B8%B0%5D.png)
다음 작업에 도움이 되는 쉘 bash 스크립트를 알려주십시오.
마지막으로 추가된 디렉터리의 4개 파일의 크기가 동일하면 종료하고, 그렇지 않으면 계속합니다.
예:
ls -l $dir_path | awk '{print $5}' | tail -4
인쇄된 4개의 값이 서로 동일하면 종료하고, 그렇지 않으면 계속합니다.
답변1
zsh -c 'zmodload zsh/stat
[[ $(zstat -N +size -- *(.om[1,4])) =~ $'\''(.*)\n\\1\n\\1\n\\1'\'' ]]' && exit
현재 디렉토리에서 숨겨지지 않은 최신 일반 파일 4개가 동일한 크기인 경우 종료됩니다.
GNU 시스템에서는 다음을 수행할 수도 있습니다.
find . -maxdepth 1 ! -name '.*' -type f -printf '%T@ %s\n' |
sort -rn |
awk 'NR == 1 {v = $0}; v != $0 {exit}; NR == 4 {exit 1}' || exit
POSIX적으로:
ls -tnq -- "$dir_path" |
awk '!/^-/ {next}
n++ == 0 {v = $5}
v != $5 {exit}
n == 4 {exit 1}' || exit
자신의 접근 방식과 같이 최신 4개(알파벳순 목록) 대신 마지막 4개(일반 파일, 심볼릭 링크 또는 소켓 등)를 출력하려면 다음을 ls
수행할 수 있습니다(여전히 POSIXly).
ls -rnq -- "$dir_path" |
awk 'NR == 1 {next}
NR == 2 {v = $5}
v != $5 {exit}
NR > 4 {exit 1}' || exit
답변2
ls -c
정렬하는 데 사용됨시간, uniq
동일한지 확인하세요.
ls -crntq | tail -4 | awk '{print $5}' | uniq -c | grep -q "^\s*4\s" && exit