2017-01-30 7 views
1

新しいビルドが作成されたときにDebianリポジトリ(cydia用)をシェルスクリプトで自動化しようとしていますが、これは現在MD5が必要なcydiaの最新バージョンリリースファイルに含まれるPackagesファイルのハッシュ私が試したし、プログラムのハッシュを追加することができなかった、私は、ファイルのハッシュを取得することができました:ファイルの最後にmd5sumsを追加する

echo -n | cat ./Packages | md5sum | awk '{print $1}' 

を、私はバイト単位でファイルのサイズを取得することができます。

stat -f%z ./Packages 

が、私はすることができます「Tは形式で1行を作成する方法を考え出す:

c98fd649b21ebf3cc66d9e565f75284f 404 Packages 

を、リリースファイルの適切な行に追加し

リリースファイル:

Origin: Repo name 
Label: label 
Suite: stable 
Version: 0.9 
Codename: codename 
Architectures: iphoneos-arm 
Components: main 
Description: Description. 
MD5Sum: 
c98fd649b21ebf3cc66d9e565f75284f 404 Packages 
b361d77125813106377a48616c7c4a38 293 Packages.gz 
e2f125c1fa9ec8a183064d0b4fec3b3d 320 Packages.bz2 

私の質問は、どのように私は、リリース内の各パッケージファイルのバイト単位のハッシュとサイズを置き換えることができますか?

答えて

1

あなたが望む形式でハッシュとサイズを表示する関数を作成することができます

print_hash_and_size() { 
    printf " %s %s %s\n" $(md5sum "$1" | awk '{print $1}') $(stat -c %s "$1") "$1" 
} 

そして、あなたはあなたのリリースファイルに追加したいファイルごとに上記の関数を呼び出します。

ややあなたの例のように、あなたのファイルに4行を追加します
{ 
    printf "%s\n" "MD5Sum"; 
    print_hash_and_size Packages; 
    print_hash_and_size Packages.gz; 
    print_hash_and_size Packages.bz2; 
} >> release_file 

MD5Sum: 
c98fd649b21ebf3cc66d9e565f75284f 404 Packages 
b361d77125813106377a48616c7c4a38 293 Packages.gz 
e2f125c1fa9ec8a183064d0b4fec3b3d 320 Packages.bz2 

私はあなたがハッシュを取得するには、このコマンドシーケンスを使用している参照してください。

echo -n | cat ./Packages | md5sum | awk '{print $1}' 

echo -ncatが必要な理由がわかりません。上記の関数で見たように、ファイル名は引数としてmd5sumに直接渡すことができます。

0

あなたは1つのライナーが必要な場合:

$ find -name 'Packages*' -printf "%P\n" | 
xargs -I FILE sh -c 'echo $(md5sum -b FILE | awk '\''{print $1}'\'') $(stat -c%s FILE) $(echo "FILE") | paste - - -' | 
sed -rn 'h;n;N;G;p' 

15bfecb2b041d5387aacdd32879e4e56 324 Packages 
997a7252f202566a1e5fdc5b50c2ffdf 283 Packages.gz 
e805c26ff46c6e138e3cd198cff281ea 301 Packages.bz2 
関連する問題