bugfix> bash > 投稿

私は何千ものDebianパッケージを所有しており、それらのパッケージ内のすべての実行可能ファイルを1つのディレクトリに移動する必要があります。単一のパッケージの場合、 ar パッケージを抽出するコマンドと、典型的なDebianパッケージには、実行可能な実行可能ファイルが実際に含まれている「data.tar.xz」ファイルがあります。次に、「data.tar.xz」を使用して抽出できます tar コマンドを実行し、実行可能ファイルを新しいディレクトリに手動で移動します。何千ものパッケージがあり、bashスクリプトを使用して作業を完了することを考えていたため、各パッケージに対してこれを行うのは面倒です。私の現在のディレクトリ構造は次のようになります(ここでは3つのパッケージのみを示しています。all_executablesはすべての実行可能ファイルをコピーするディレクトリです)

./git_2.28.0-1_armhf.deb
./libssm1-dbg_1.3-2.1_armhf.deb
./mariadb-client-core-10.0_10.0.28-2+b1_armhf.deb
 (the list goes on)
./all_executables

Debianパッケージを抽出すると、通常、すべてのパッケージは次のように同じ構造になります。

./control.tar.xz
./data.tar.xz
./debian-binary

data.tar.xzファイルを抽出すると、いくつかのディレクトリがあり、これらのディレクトリには通常、実行可能ファイルが含まれています。これらの実行可能ファイルを1つのフォルダー(all_executables)にコピーする必要があります。誰かがこの仕事を手伝ってくれませんか。私はバッシュする初心者であり、始めるために道に迷ってしまいます。お時間をいただきありがとうございます。

回答 1 件
  • まず、これを次のようなファイルに入れます。 script

    #!/bin/sh
    for deb in "$@"
    do
        ar x "$deb" ./data.tar.xz
        tar xvf data.tar.xz --transform='s|.*/||' --wildcards './usr/bin/*'
        rm ./data.tar.xz
    done
    
    

    それを実行するには:

    sh script /path/to/*.deb
    
    

    スクリプトは、 /usr/bin/ 現在のディレクトリへのtarファイルのディレクトリ。

    あなたはこれを微調整したいと思うでしょう:

    あなたが持っているなら .deb ファイル、実行可能ファイルは data.tar.gz の代わりに data.tar.xz

    あなたのコメントから、私は他に他のファイルがあるかもしれないと収集します /usr/bin/* 興味があります。それらをコマンドに追加する必要があります。

    使い方

    #!/bin/sh シェルスクリプトの開始を示します。

    for deb in "$@"; do スクリプトの引数のループを開始します。

    ar x "$deb" ./data.tar.xz data.tar.xzファイルを抽出します。

    tar xvf data.tar.xz --transform='s|.*/||' --wildcards './usr/bin/*' グロブに一致するファイルを抽出します ./usr/bin/* から data.tar.xzx 抽出を示します。 v (オプション)詳細を示します。 f data.tar.xz 言う tar どのファイルから抽出するか。すべてのファイルが現在のディレクトリに抽出されるように、 -transform='s|.*/||' 抽出するファイルからディレクトリ名を削除します。

    rm ./data.tar.xz 処理が終わったらdata.tarファイルを削除します。

    done の終わりを知らせる for ループ。

あなたの答え