フォルダ内の各ファイルに対して.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 {} \;

たとえば、ファイルのリストを1行に1つずつ返します。

したがって、1つのアプローチは、「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 {} \;

おすすめ記事