Debianパッケージを抽出し、すべての実行可能ファイルをフォルダに移動する
私は何千ものDebianパッケージを持っており、それらのパッケージ内のすべての実行可能ファイルを1つの単一のディレクトリに移動する必要があります。単一のパッケージの場合、ar
コマンドを使用してパッケージを抽出すると、通常のDebianパッケージには「data.tar.xz」ファイルがあり、実際に実行可能ファイルが含まれています。次に、tar
コマンドを使用して「data.tar.xz」を抽出し、実行可能ファイルを新しいディレクトリに手動で移動できます。何千ものパッケージがあり、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)にコピーする必要があります。誰かが私がこの仕事をするのを手伝ってくれませんか。私はbashの初心者であり、始めるのに迷っています。お時間をいただきありがとうございます。
回答
まず、これを次のようなファイルに入れます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/*
からglobに一致するファイルを抽出しますdata.tar.xz
。x
抽出を示します。v
(オプション)詳細を示します。どのファイルから抽出するかをf data.tar.xz
指示tar
します。すべてのファイルが現在のディレクトリに-transform='s|.*/||'
抽出されるように、抽出するファイルからディレクトリ名を削除します。rm ./data.tar.xz
完了後、data.tarファイルを削除します。done
for
ループの終了を通知します。