PC의 모든 파일 목록을 만듭니다.

FILES=$(find . -type f -name "*" -printf "%s/%f\n" | sort -n) 

출력은 다음과 같아야합니다.

"size/file_name" 56872/file.txt 98566/test 1000254/foo 

PC에서 오류 발생

find: -printf: unknown primary or operator 

해결 방법이 있습니까?

댓글

  • 디렉토리에있는 파일 이름을 표시하려면 질문을 펼치십시오.
  • 요점은 PC에서 어떤 유형의 시스템이 실행되고 있으며 어떤 버전의 find가 사용됩니까?

Answer

-printf 옵션이 POSIX에 없습니다. find . 예를 들어 Linux와 같은 GNU find 의 기능입니다.

특정 구현 사용중인이 표시되지 않습니다. 확장자가없는 POSIX 일 수 있습니다. 예를 들어 FreeBSD 또는 OSX 에 없습니다.

그렇지 않으면 다음과 같은 대안을 사용할 수 있습니다 (예 : 삽입 된 공백 등을 처리하지 않지만 도구에 대해 거의 가정하지 않음).

find . -type f -exec ls -ld {} \; | awk "{ gsub("^.*/","",$9); printf "%s/%s\n", $5, $9; }" 

사용 가능한 도구에 대한 자세한 정보를 통해 (일반적으로) 솔루션을 개선 할 수 있습니다.

댓글

  • 제발 어떻게 만들 수 있습니까? 출력 목록 " file_size / file_name " 위와 같이?
  • ls 언제 find ... -print0를 사용하고 xargs -0r stat ...에 파이프하는 것이 훨씬 나을까요? stat의 GNU 및 FreeBSD 버전은 모두 출력 형식을 지정하는 (불행히도 다르거 나 호환되지 않는) 옵션을 가지고 있으며 OP에 필요한대로 size/filename를 표시 할 수 있습니다. .
  • OP는 특정 플랫폼 별 솔루션을 가정 할 수있는 정보를 제공하지 않았습니다.

답변

findxargs (GNU 포함 stat) :

find . -type f -print0 | xargs -0r stat -c "%s/%n" 

GNU findprintf 어쨌든 (하지만 statfind ... -printf 파일에 대해 알아낼 수 있기 때문에 다른 상황에서 유용 할 수 있습니다. 표시 할 수 없습니다.

FreeBSD & 그러나 Mac OS X는 다른 이야기입니다.

findxargs (FreeBSD 포함) ( Mac OS X) stat :

find . -type f -print0 | xargs -0r stat -f "%z/%N" 

선택적으로

각 파일 이름의 시작 부분에서 ./를 제거합니다.

FreeBSD 테스트 VM의 샘플 출력 :

# find . -type f -print0 | xargs -0r stat -f "%z/%N" | sed -e "s:/./:/:" | head 149/.k5login 254/.profile 1169/.cshrc 297/.login 5589/.history 171/.ssh/known_hosts 1803/.ssh/authorized_keys 6699/.bash_history 368/.bashrc 4065/.viminfo 

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다