使い始めた組織モデル私の仕事を計画するGTDスタイルシステム。各組織ファイルを次のディレクトリに配置します。ドロップボックスフォルダ内では、Cygwin、Mac OS X、Debianという3つの異なるローカルコンピュータでこのファイルを編集/管理するためにemacsを実行しています。私も使うからモバイル組織私のiPadからこれらの組織ファイルにアクセスするには、checksums.dat
変更内容に応じてファイルを最新の状態に保つ必要があります。これはを実行することによって行うことができますmd5sum *.org > checksums.dat
。
問題はそこにあるサムコマンドの他のコマンドmd5sum
:md5sum.exe
Cygwin、md5
Mac OS X、およびmd5sum
Debianで。理想的な状況は、現在のコンピュータで利用可能なコマンドを検出し、そのコマンドを実行してmd5チェックサム操作を実行するDropboxフォルダに保存されているmakefileです。
答え1
チェックサムを生成するための可能なコマンド
残念ながら、暗号チェックサムを生成する標準ユーティリティはありません。 CRCを生成するための標準ユーティリティがあります。cksum
;これは、敵対的でない環境で変更を検出するのに十分です。
MD5の代わりにSHA1を使用することをお勧めします。 MD5ユーティリティはありますが、SHA1はないシステムはあまりありません。暗号チェックサムを使用する場合は、競合を見つけるための既知の方法がないアルゴリズムを使用することをお勧めします(サイズも確認すると仮定)。
非標準ですが、要約を計算できる一般的なツールは次のとおりです。OpenSSL。 Cygwin、Debian、OSXで動作しますが、残念ながらOSXのデフォルトインストールには含まれていません。
openssl dgst -sha1
OSX 10.6ではshasum
このユーティリティはDebian(パッケージの一部perl
)にも存在し、Cygwinにも存在すると思います。これはPerlスクリプトです。ほとんどのUnixシステムにはPerlがインストールされているため、このスクリプトをどこでも使用できないことが心配な場合は、makefileと一緒にバンドルできます。
システムに適したコマンドを選択してください
さて、実際にどこでも動作するコマンドが見つからないとしましょう。
殻に
組み込みコマンドを使用して、そのtype
コマンドが使用可能であることを確認してください。
sum=
for x in sha1sum sha1 shasum 'openssl dgst -sha1'; do
if type "${x%% *}" >/dev/null 2>/dev/null; then sum=$x; break; fi
done
if [ -z "$sum" ]; then echo 1>&2 "Unable to find a SHA1 utility"; exit 2; fi
$sum *.org
GNUが作る
あなたはそれを使用することができますshell
機能makefileがロードされたらシェルフラグメントを実行し、出力を変数に保存します。
sum := $(shell { command -v sha1sum || command -v sha1 || command -v shasum; } 2>/dev/null)
%.sum: %
$(sum) $< >$@
ポータブル(POSIX)ブランド
ルール内でのみシェルコマンドを実行できるため、チェックサムを計算する各ルールにはルックアップコードを含める必要があります。コードスニペットを変数に入れることができます。ルールの個々の行は独立して評価されることを覚えておいてください。また、$
シェルに渡されるシンボルはエスケープする必要があることを覚えておいてください$$
。
determine_sum = \
sum=; \
for x in sha1sum sha1 shasum 'openssl dgst -sha1'; do \
if type "$${x%% *}" >/dev/null 2>/dev/null; then sum=$$x; break; fi; \
done; \
if [ -z "$$sum" ]; then echo 1>&2 "Unable to find a SHA1 utility"; exit 2; fi
checksums.dat: FORCE
$(determine_sum); \
$$sum *.org
答え2
少しハッキングですが、それぞれが存在するかどうかをテストし、存在する場合は実行できます。
[ -x "`which md5 2>/dev/null`" ] && md5 newfile >>sums
[ -x "`which md5sum 2>/dev/null`" ] && md5sum newfile >>sums
md5sum
私はcygwinが(include)なしでコマンドを認識すると確信しています.exe
が、必要に応じて含めることができます。
答え3
誰でも GNU自動ツール(コメントで述べたように)またはCMakeオプションです。
GNU autotoolsはより伝統的なアプローチですが(おそらく私の考えでは)、初期のプロジェクトの構築にGNU autotoolsを使用する可能性について人々はあまり興奮していないようです。とにかく、それは学習曲線です。 CMakeはより新しく、おそらくあまり一般的ではないでしょう(そしてまだ学習曲線があります)。独自の構文があり、プラットフォームに適したmakefileを生成します。 CMakeにはx中心が少ないという明確な利点があります。 Unix、Windows、Macでも安定して動作します。たとえば、makefileの代わりにmsvcプロジェクトを作成できます。
編集:もちろん、「makefiles」が提案されているので、この答えはその仮定に合います。しかし、おそらくPythonスクリプトや単純なJavaプログラムが作業に適している可能性があります。スクリプト/プログラミング言語は、プラットフォーム全体で同じことを行います。
答え4
emacsを実行しているので、emacs自体を使用してチェックサムを計算できます。http://www.gnu.org/software/emacs/manual/html_node/elisp/MD5-Checksum.html。