디렉토리 및 하위 디렉토리의 모든 파일을 크기별로 정렬하여 나열하고 전체 경로는 나열하지 않고 파일 이름만 나열하는 스크립트

디렉토리 및 하위 디렉토리의 모든 파일을 크기별로 정렬하여 나열하고 전체 경로는 나열하지 않고 파일 이름만 나열하는 스크립트

디렉터리와 하위 디렉터리의 모든 파일을 크기별로 정렬하여 나열하고 전체 경로는 나열하지 않고 파일 이름만 나열하는 스크립트를 찾고 있습니다.

find . -type f -exec ls -lhS {} \+작동하지만 경로를 제공합니다.

find . -type f -printf '%f\n'또한 작동하지만 정렬 방법이 확실하지 않거나 여기에 파일 크기도 포함할 수 있는지 잘 모르겠습니다.

답변1

지원하는 경우 ("파일 크기(바이트)")를 사용할 find수 있습니다 .%s-printf

sortNull로 구분된 입력( )을 지원하는 경우 -z다음을 수행할 수 있습니다.

find . -type f -printf "%s %f\0" | sort -nz | tr '\0' '\n'

답변2

시스템이 zsh명령을 지원하는 경우 bash스크립트에서 실행할 수 있습니다

zsh -c 'ls -lhS -- **/*(.D)'

여기에는 설명이 필요할 수 있습니다.

  • zsh: 무엇보다도 bash많은 기능을 갖춘 더욱 강력한 쉘입니다.
  • -c: 실행할 명령으로 다음 매개변수를 사용합니다.zsh
  • ls -lhS: 귀하의 질문에 따르면 이것은 실행하려는 명령입니다
  • --: -문자로 시작될 수 있는 이상한 파일 이름을 처리합니다.
  • **:전반적인 상황여러 디렉터리 일치
  • *: 기준전반적인 상황- 이 디렉토리의 모든 파일과 일치
  • ():글로벌 예선어떤 파일을 선택해야 하는지, 어떤 순서로 선택해야 하는지 지정하세요.
  • .: 일반 텍스트 파일만 선택합니다( type f와 동일 find).
  • D:결과에 도트 파일(숨겨진 파일)을 포함합니다.

질문을 다시 읽은 후에는 앞 부분뿐만 아니라 결과에서 전체 경로를 제거하는 것이 좋겠다고 생각합니다. 이 작업은 다음을 통해 계속 수행할 수 있습니다 zsh.

print -l **/*(.OLDe:'reply=${REPLY##*/}':)

그러나 이것은 결국 트릭에 관한 것이 아니기 때문에 약간 많을 수 있으므로 +를 사용하여 "표준" 솔루션을 zsh제안하겠습니다 .findsed

find . -type f -exec sh -c 'ls -lhS "$@" | sed "s| \..*/| |"' {} \+

관련 정보