"sort" 명령에 파이프를 연결하여 "find -print0"의 출력을 정렬합니다.

"sort" 명령에 파이프를 연결하여 "find -print0"의 출력을 정렬합니다.

find출력을 명령에 전달하기 전에 알파벳순으로 정렬할 수 있어야 합니다. 사이에 입력이 | sort |안되는데 어떻게 해야 하나요?

find folder1 folder2 -name "*.txt" -print0 | xargs -0 myCommand

답변1

평소대로 사용 find하고 NUL을 사용하여 행을 구분합니다. GNU는 sort-z 스위치를 사용하여 이를 처리할 수 있습니다:

find . -print0 | sort -z | xargs -r0 yourcommand

답변2

일부 버전에는 Null 종료 레코드를 허용하는 옵션이 sort있습니다 .-z

find folder1 folder2 -name "*.txt" -print0 | sort -z | xargs -r0 myCommand

또는 고급 스크립트를 작성하여 이를 수행할 수 있습니다.

find folder1 folder2 -name "*.txt" -print0 | python -c 'import sys; sys.stdout.write("\0".join(sorted(sys.stdin.read().split("\0"))))' | xargs -r0 myCommand

매개변수와 함께 호출 되도록 -r옵션을 추가합니다 .xargsmyCommand

답변3

정렬 플래그가 필요한 것 같습니다 -n#

사람별로 정렬:

-n, --numeric-sort
    compare according to string numerical value

편집하다

print0이 이것과 관련이 있을 수 있습니다. 방금 테스트했습니다. print0을 꺼내고 -z플래그를 사용하여 정렬에서 문자열을 null로 종료 할 수 있습니다.

답변4

일부 구현에서는 매개변수를 통해 직접 순회 순서를 find지원합니다 .-s

$ find -s . -name '*.json'

FreeBSD에서 발견매뉴얼 페이지:

-s       Cause find to traverse the file hierarchies in lexicographical
         order, i.e., alphabetical order within each directory.  Note:
         `find -s' and `find | sort' may give different results.

관련 정보