예 다음 파일이 있습니다
/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 {} \;