Estrazione dei pacchetti Debian e spostamento di tutti gli eseguibili in una cartella
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 ar
comando 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 tar
il 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
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:
Se hai
.deb
file vecchi, gli eseguibili potrebbero essere in formatodata.tar.gz
anzichédata.tar.xz
.Dal tuo commento, deduco che potrebbero esserci altri file oltre a
/usr/bin/*
quelli che ti interessano. Dovranno essere aggiunti al comando.
Come funziona
#!/bin/sh
indica l'inizio di uno script di shell.for deb in "$@"; do
avvia un ciclo sugli argomenti dello script.ar x "$deb" ./data.tar.xz
estrae il file data.tar.xz.tar xvf data.tar.xz --transform='s|.*/||' --wildcards './usr/bin/*'
estrae qualsiasi file corrispondente al glob./usr/bin/*
dadata.tar.xz
.x
indica estratto.v
(facoltativo) indica prolisso.f data.tar.xz
indicatar
da quale file estrarre. In modo che ogni file venga estratto nella directory corrente,-transform='s|.*/||'
rimuove i nomi delle directory dal file da estrarre.rm ./data.tar.xz
rimuove il file data.tar dopo che abbiamo finito con esso.done
segnala la fine delfor
ciclo.