폴더의 각 파일에 대해 .sha256 해시 파일을 재귀적으로 생성하는 방법은 무엇입니까?

폴더의 각 파일에 대해 .sha256 해시 파일을 재귀적으로 생성하는 방법은 무엇입니까?

예 다음 파일이 있습니다

/sdcard/testfolder/file1
/sdcard/testfolder/file2
/sdcard/testfolder/file3
/sdcard/testfolder/file4.ext

각각에 대해 .sha256 파일을 만들고 싶습니다.

/sdcard/testfolder/file1.sha256
/sdcard/testfolder/file2.sha256
/sdcard/testfolder/file3.sha256
/sdcard/testfolder/file4.ext.sha256

이 방법은 파일 이름과 폴더 이름의 가능한 모든 유효한 문자에 대해 작동해야 합니다.

내 출발점은 find를 사용하는 것이 었습니다.

참고: 저는 "toybox 0.8.0-android"의 조회를 사용하고 있으며 변경할 수 없지만(루팅할 수 없는 불변 파일 시스템) 완전히 작동하는 것 같습니다. 내 쉘은 "MirBSD Korn Shell" 2014입니다.https://launchpad.net/mksh나도 바꿀 수 없어

find /sdcard/testfolder -type file -exec echo {} \;

예를 들어, 파일 목록을 한 줄에 하나씩 반환합니다.

따라서 한 가지 접근 방식은 'echo {}'를 이에 상응하는 것으로 바꾸는 것입니다.

sha256sum /sdcard/testfolder/file4.ext > /sdcard/testfolder/file4.ext.sha256

어쩌면 좋아

find /sdcard/testfolder -type file -exec sha256sum {} > {}.sha256 \;

불행하게도 find -exec는 해당 특정 구문에서는 작동하지 않습니다.

find 명령 예시의 자세한 목록 보기

https://sysaix.com/43-practical-examples-of-linux-find-command

-exec command parameter1 {parameter2}; 가 유일한 형식인 것 같은데, 제가 틀렸을 수도 있나요?

가능하다면 이것을 단일 명령으로 유지하고 싶습니다

또 다른 경로는 다른 명령을 파이프하는 것일 수 있지만 파이프의 파일 이름을 명령줄 인수로 참조하는 방법을 찾을 수 없습니다. 어쩌면 불가능할까요?

find /sdcard/testfolder -type file | sort | sha256sum $filename? > $filename?.sha256

답변1

나는 무엇을 할 것인가:

find /sdcard/testfolder -not -name '*sha256' -type file -exec sh -c '
    sha256sum "$1" > "$1.sha256"
' sh {} \;

관련 정보