例 次のファイルがあります
/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 {} \;