Estrazione dei pacchetti Debian e spostamento di tutti gli eseguibili in una cartella

Aug 22 2020

Ho migliaia di pacchetti Debian e ho bisogno di spostare tutti i file eseguibili all'interno di quei pacchetti in un'unica directory. Per un singolo pacchetto, potrei usare il arcomando per estrarre il pacchetto e quindi il tipico pacchetto Debian ha un file "data.tar.xz" che contiene effettivamente i possibili eseguibili. Potrei quindi estrarre "data.tar.xz" usando taril comando e spostare manualmente gli eseguibili nella nuova directory. È una seccatura farlo per ogni pacchetto poiché ci sono migliaia di pacchetti e stavo pensando di usare uno script bash per portare a termine il lavoro. La mia attuale struttura di directory è la seguente (qui sono mostrati solo 3 pacchetti, all_executables è la directory per copiare tutti gli eseguibili)

./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

Una volta estratto un pacchetto Debian, ogni pacchetto di solito ha la stessa struttura come segue:

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

Dopo aver estratto il file data.tar.xz ci sono poche directory e queste directory in genere contengono gli eseguibili. Devo copiare questi eseguibili in una cartella (all_executables). Qualcuno potrebbe aiutarmi a fare questo compito. Sono un principiante a colpire e scopro di essermi perso per iniziare. Grazie per il tuo tempo.

Risposte

1 John1024 Aug 22 2020 at 12:55

Per iniziare, inseriscilo in un file chiamato, diciamo, 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

Per eseguirlo:

sh script /path/to/*.deb

Lo script estrarrà tutti i contenuti della /usr/bin/directory del file tar nella directory corrente.

Ti consigliamo di modificare questo:

  1. Se hai .debfile vecchi, gli eseguibili potrebbero essere in formato data.tar.gzanziché data.tar.xz.

  2. Dal tuo commento, deduco che potrebbero esserci altri file oltre a /usr/bin/*quelli che ti interessano. Dovranno essere aggiunti al comando.

Come funziona

  1. #!/bin/shindica l'inizio di uno script di shell.

  2. for deb in "$@"; doavvia un ciclo sugli argomenti dello script.

  3. ar x "$deb" ./data.tar.xzestrae il file data.tar.xz.

  4. tar xvf data.tar.xz --transform='s|.*/||' --wildcards './usr/bin/*'estrae qualsiasi file corrispondente al glob ./usr/bin/*da data.tar.xz. xindica estratto. v(facoltativo) indica prolisso. f data.tar.xzindica tarda quale file estrarre. In modo che ogni file venga estratto nella directory corrente, -transform='s|.*/||'rimuove i nomi delle directory dal file da estrarre.

  5. rm ./data.tar.xzrimuove il file data.tar dopo che abbiamo finito con esso.

  6. donesegnala la fine del forciclo.