システムにソフトウェアをインストールしようとしている状況があります。
私は偽のルートアプローチを使用してそれらを別のディレクトリにインストールし、インストールするすべてのファイル、ディレクトリ、およびリンクを3つのファイルFILES
、DIRS
、LINKS
にリストしています。
次に、findを使用して、sha1sums
という名前のファイル内のすべてのファイルのSHA1ハッシュを取得しています。ファイルsha1sums
自体のハッシュは必要ありません。だから私はこのコマンドを使用しました
find . -type f -exec sha1sum {} \; | grep -ve "\./sha1sums$" >sha1sums
これはうまくいきました。ただし、kbd-2.0.3
をインストールすると、多くのエラー行がスローされました-
find: 'sha1sum' terminated by signal 13
シグナル13がSIGPIPE
シグナル(「壊れたパイプ」)であることを私は知っています。しかし、私には2つのことがありません。
grep
が閉じていることが原因です。しかし、なぜそれを閉じるのですか?使用しているすべてのユーティリティのGNUバージョン、またはネイティブのOpenBSDユーティリティでは、問題を実際に再現することはできません。ディスクが不良である可能性がありますか?
ただし、grep
をパイプ処理してsha1sums
ファイル名を除外するのではなく、その特定のファイルのSHA1ダイジェストの計算を完全に省略できます。
find . -type f ! -path './sha1sums' -exec sha1sum {} + >sha1sums
否定された-path
テストは、./sha1sums
に渡されたパス名のリストからsha1sum
パス名を削除します。
さらに、ユーティリティは、最後に+
があるため、名前ごとに1回ではなく、一度にできるだけ多くのファイル名で呼び出されます。
これはパイプラインを使用していないため、SIGPIPE
の問題は発生しません。