그러면 모든 텍스트 파일의 경로 목록이 제공됩니다.
find / -type f -name '*.txt' > ~/Desktop/sorted.txt
각 항목의 파일 크기에 따라 이 경로 목록을 정렬하고 싶지만 무엇을 사용해야 할지 잘 모르겠습니다. 예상했던 대로 작동하지 않습니다.
find / -type f -name '*.txt' |sort -S > ~/Desktop/sorted.txt
어떤 제안이 있으십니까?
답변1
이 명령은 wc
일치하는 각 파일에 대해 별도의 프로세스를 사용하므로 성능이 저하될 수 있습니다. 호환성과 POSIX 준수를 염두에 두고 만들었습니다.
find / -type f -name '*.txt' -exec wc -c {} \; | sort -t ' ' -n -k 1,1 | cut -d ' ' -f 2-
각각은 wc -c
양식에 선을 생성합니다.
12345 /path/to/file/possibly with spaces/foo.txt
여기서 첫 번째 공백은 바이트 수와 경로를 구분합니다. sort
모든 줄을 가져오고 공백 문자를 필드 구분 기호로 사용하며 첫 번째 필드에 따라, 즉 바이트 수에 따라 숫자로 정렬합니다. 그런 다음 cut
공백 문자를 필드 구분 기호로 사용하고 두 번째 필드, 즉 첫 번째 필드를 제외한 모든 것, 즉 바이트 수를 제외한 모든 것, 즉 경로를 인쇄합니다.
이 솔루션은 줄 수를 기준으로 정렬하도록 쉽게 조정할 수 있습니다. wc -l
대신 에 을 사용하면 됩니다 wc -c
.
참고:
하나 이상의 개행 문자가 포함된 경로는 코드를 손상시킵니다. 코드가 이에 영향을 받지 않도록 하려면 널 문자를 구분 기호로 지원하는 도구를 사용할 수 있습니다. POSIX 도구를 사용하면 가능하다면 이것이 어렵습니다. 이 답변은 이식성에 중점을 두고 있으므로 텍스트 파일에 대한 모든 경로가 "좋은" 것이길 바랍니다.
답변2
도구를 함께 연결하는 (아마도 차선책인) 접근 방식을 항상 사용할 수 있습니다.
find / -type f -name '*.txt' -ls | sort -nk7,7 | awk '{print $NF;}'
- 찾기 스위치
-ls
를 누르면 파일 크기를 포함한 여러 추가 열이 표시됩니다(GNU 도구 세트의 7번째 열은 MacOS에서는 다를 수 있음). sort
7번째 열(파일 크기)에서 숫자 정렬을 수행합니다 .- 다른 모든 필드를 제거
awk
하고 파일 이름만 인쇄합니다.