“find”의 출력을 정렬 하시겠습니까?


77

find명령으로 파이프하기 전에 출력을 사전 순으로 정렬 할 수 있어야합니다 . | sort |사이에 들어가도 작동하지 않아서 어떻게해야합니까?

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

답변:


52

사용 find평소와 NUL과의 선을 구분합니다. GNU sort는 -z 스위치를 사용하여이를 처리 할 수 ​​있습니다.

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

58

일부 버전에는 널 종료 레코드를 허용 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.


좋은 것 (2?) ... 흥미롭게도, 두 방법은 .다르게 처리 sort합니다 ... 목록의 끝에 감겨져 ... python맨 위로 정렬됩니다. (Python sorts with LC_COLLATE=C)
Peter.O

-t \0sort ( -z동의어) 옵션 도 있습니다
Javier

1
이 모든 |sort솔루션 의 문제점 은 -exec더 이상 사용할 수 없다는 것 입니다. OK, -exec와 함께 작동하도록 주어진 문장을 다시 작성할 수는 있지만 xargs, "미니 스크립트"는 무엇입니까? ( sh -c ...) 나는 함께 '쉬 -c'미니 스크립트를 변환하는 그 사소한를 호출 할 것이다 다수 가 함께 작업 할 수 있도록 명령 xargs(즉 모든 가능한 경우)
구문 에러

@syntaxerror : xargs와 함께 sh -c를 사용하면 어떤 문제가 있습니까? printf %s\\n a b c d e | xargs -n3 sh -c 'printf %s, "$@"; printf \\n' x
Roger Pate

4

-nsort #에 대한 플래그 가 필요하다고 생각합니다 .

사람 정렬에 따르면 :

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

편집하다

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


글쎄, 그것은 print0불행히도 내 명령에 전달 해야하는 파일 이름을 공백으로 구분 하는 것으로 보입니다.
Industrial

1

GNU Parallel http://www.gnu.org/software/parallel/을 설치 한 경우 다음을 수행 할 수 있습니다.

find folder1 folder2 -name "*.txt" -print | 
  sort |
  parallel myCommand

다음과 같이 GNU Parallel을 간단하게 설치할 수 있습니다.

wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
chmod 755 parallel
cp parallel sem

자세한 내용은 GNU Parallel 소개 동영상을 참조하십시오 . https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1


GNU Parallel 사용에 대한 정당성은 무엇입니까? 속도를 높이려면?
Peter Mortensen

그리고 \ 0 분리 된 레코드를 엉망으로 만들 필요가 없습니다.
Ole Tange
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.