소개하다
이 명령을 사용하여 크기가 두 번째로 큰 파일/디렉토리를 찾습니다.
내가 소유한 것
du /etc/ -hsx * | sort -rh | head -2
이 명령은 내가 선택한 옵션에 따라 /etc/에서 가장 큰 2개의 파일/디렉토리를 제공하는 두 줄을 보여줍니다.
질문
두 번째로 큰 파일만 찾으려면 어떻게 해야 하나요? 어떻게 해야 합니까?
예를 들어, 다음 명령을 실행하여sudo du /etc/ -hsx * | sort -rh | head -2 | tail -1
나는 결과를 얻는다
1.5M 버클
하지만 내가 기대하는 것은 크기나 그 어떤 것도 아닌 이름만 얻는 것입니다. 이름만요. 또한 명령을 사용하여 수행할 수도 있다는 것을 읽었습니다 ls
.
답변1
두 번째로 큰 파일만 찾으려면 어떻게 해야 하나요? 어떻게 해야 합니까?
강제 zsh 옵션:
zsh -c 'print -r /etc/**/*(DoL[-2])'
이것은 zsh를 호출하고 다음과 같은 인수를 인쇄하도록 요청합니다.
- 재귀적 파일 이름 확장
**/*
o
크기(ength)별로 정렬되어L
크기가 커집니다.D
이 glob을 활성화dotglob
하면 숨겨진 파일이나 숨겨진 디렉터리의 파일도 고려됩니다.- 목록의 마지막 항목에서 두 번째 항목만(
[-2]
)
답변2
통과했다고 가정크기, 이는 카탈로그가 아닌 파일의 디스크 사용량 또는 카탈로그 파일을 통해 참조된 모든 파일의 누적 디스크 사용량( du
사용량과 동일)을 의미합니다. GNU 유틸리티를 사용하면 다음과 같은 작업을 수행할 수 있습니다.
sudo LC_ALL=C du -al0d1 /etc |
sort -zrn |
tail -zn+2 |
head -zn1 |
cut -zf2- |
tr '\0' '\n'
++ 는 로 대체 tail
할 수도 head
있습니다 .cut
sed -z $'1d;s/^[^\t]*\t//;q'
노트:
- with
du /etc/ -hsx *
(GNU를 가정하고find
옵션POSIXLY_CORRECT
을 사용하는 환경이 아닌 경우)뒤쪽에/etc
옵션이 아닌 매개변수), 해당 파일에서 숨겨지지 않은 모든 파일의 디스크 사용량을 얻게 됩니다.현재의목차. -a
숨겨진 디렉터리를 제외하거나 매개변수 제한에 도달하는-d1
문제는 및(GNU 확장)을 사용하여 해결됩니다.*
-h
이식성이 없을 뿐만 아니라 정밀도가 많이 떨어지고(따라서 잘못된 파일이 보고될 가능성이 높음)sort
작업을 훨씬 더 어렵게 만들어 비생산적입니다.- (GNU 확장) 이 없으면
-l
하드 링크는 한 번만 계산되므로 과 가 동시에 발견되면 차지하는some-large-file
디스크 공간은 이러한 디렉터리 중 하나만이 됩니다 ./etc/dir1/some-large-file
/etc/dir2/other-link-to-some-large-file
some-large-file
du
- 줄 바꿈은 파일 이름의 모든 문자만큼 유효합니다(macOS는 실제로
/etc
줄 바꿈 IIRC가 포함된 파일 이름을 제공하는 데 사용됨). 따라서 일반적으로 이러한 문제를 처리하기 위해 줄 기반 텍스트 처리를 사용할 수 없습니다. 대부분의 GNU 유틸리티에는 NUL을 사용하여 레코드를 구분하는 옵션이 있습니다-z
.-0
- 이 정렬된 목록에서 첫 번째 레코드는 입니다
/etc
. 따라서 두 번째 레코드를 가져오면 실제로/etc
두 번째로 무거운 파일/디렉터리가 아니라 가장 무거운 파일/디렉터리를 보고하는 것입니다. sort
동률이 있는 경우 로케일 정렬 순서에서 마지막으로 정렬된 파일 이름은 없이 수행된 마지막 비교 비교에 의해 선택됩니다-s
.
답변3
가능한 옵션 중 하나는 sort
결과를 다시 뒤집고 다음 head -1
과 같이 사용하는 것입니다.
du /etc/ -hsx * | sort -rh | head -2 | sort -r | head -1
답변4
그리고sed, 다음을 추가하세요.
| sed -n 2p
추가로 아무것도 할 필요가 없습니다머리.
완전한 명령:
du /etc/ -hsx * | sort -rh | sed -n 2p
붙어있고 싶다면머리정렬 후 이것을 추가하십시오꼬리:
| tail +2
완전한 명령:
du /etc/ -hsx * | sort -rh | head -2 | tail +2