Linux: 명령을 사용하여 두 번째로 큰 파일/디렉토리 찾기

Linux: 명령을 사용하여 두 번째로 큰 파일/디렉토리 찾기

소개하다

이 명령을 사용하여 크기가 두 번째로 큰 파일/디렉토리를 찾습니다.

내가 소유한 것

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있습니다 .cutsed -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-filesome-large-filedu
  • 줄 바꿈은 파일 이름의 모든 문자만큼 유효합니다(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

관련 정보