openssh로 파이프하기 전에 find 출력 정렬

openssh로 파이프하기 전에 find 출력 정렬

이 명령을 사용하여 재귀적으로 생성하고 있습니다.SHA-512 해시디렉터리 계층 구조의 각 파일에 대해 다음을 수행합니다.

find . -type f -exec openssl sha512 {} \;

해시를 생성하기 전에 파일을 사전순으로 정렬하고 싶습니다.

다음과 같이 사용할 수 있습니다 sort.

find . -type f | sort

하지만 정렬된 파일 목록을 openssl.

find . -type f | sort | openssl sha512

그러나 이는 전체 출력의 단일 해시를 생성하는 sort반면 저는 각 개별 파일의 해시를 원합니다.

find일부 bash 버전에는 옵션 -s(" find사전순으로 탐색된 파일 계층 구조 발생")이 포함되어 있지만 내 find.

도와주셔서 감사합니다!

답변1

xargs당신은 당신이 원하는 것을 얻기 위해 그것을 사용할 수 있습니다 .

find . -type f -print0 | sort -z | xargs -0 -n1 openssl sha512

-n1옵션은 xargs가 명령에 하나의 인수만 허용하도록 지시합니다 openssl. -print0및 옵션은 파일 이름에 "문제" 문자(예: 삽입된 개행 문자)가 있는 경우 -z파이프가 끊어지는 것을 방지합니다 .-0

답변2

다음과 같이 xargs -L 1 openssl sha512에 파이프합니다.

find . -type f | sort | xargs -L 1 openssl sha512

xargs는 출력을 가져와 프로그램의 명령줄로 실행합니다. "-L 1"은 한 번에 한 줄로 제한합니다.

관련 정보