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
옵션을 추가합니다 .xargs
myCommand
답변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.