Bash [totale neofita] - Creazione script estrazione universa
Moderatore: Staff
Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
- Blallo
- Packager

- Messaggi: 3302
- Iscritto il: ven 12 ott 2007, 11:37
- Nome Cognome: Savino Liguori
- Slackware: 14.2 / 12.2
- Kernel: 4.4.14-smp
- Desktop: DWM
- Località: Torino / Torremaggiore (FG)
- Contatta:
Bash [totale neofita] - Creazione script estrazione universa
Vorrei creare uno scriptino in bash per estrarre archivi
come faccio a riconoscere l'estensione del file tramite uno script bash?
come faccio a riconoscere l'estensione del file tramite uno script bash?
Ultima modifica di Blallo il sab 13 mar 2010, 19:35, modificato 1 volta in totale.
Github: https://github.com/8lall0
- d4z_c0nf
- Packager

- Messaggi: 1296
- Iscritto il: mar 14 mar 2006, 18:07
- Nome Cognome: Rocco Aliberti
- Slackware: 14.2-current64
- Kernel: 4.14.73
- Desktop: awesomeWM
- Località: Pinerolo
Re: Bash [totale neofita] - Creazioen script estrazione universa
jimmy_page_89 ha scritto:Vorrei creare uno scriptino in bash per estrarre archivi
come faccio a riconoscere l'estensione del file tramite uno script bash?
Codice: Seleziona tutto
${filename##*.}
Così prendi solo l'estensione, ovviamente l'ultima. Nel senso, sia che sia tar.gz o un .gz o .zip prendi solo gz.
Insomma ti ho dato un input, ora sta a te andare ad approfondire l'uso degli operatori
{#} e {%} .
- sardylan
- Linux 3.x

- Messaggi: 993
- Iscritto il: mar 24 apr 2007, 9:21
- Nome Cognome: Luca Cireddu
- Slackware: current 64bits
- Kernel: 3.16
- Desktop: KDE 4.14
- Distribuzione: Debian - CLFS
- Località: Cagliari
- Contatta:
Re: Bash [totale neofita] - Creazioen script estrazione universa
Passa il nome del file al comando "file", e poi usa grep per decidere cosa fare...
Fai delle prove dirette per vedere il tipo di output...
Piccolo esempio preso dal mio SlackBuild tipo:
Fai delle prove dirette per vedere il tipo di output...
Piccolo esempio preso dal mio SlackBuild tipo:
Codice: Seleziona tutto
if file "${CWD}/${SRC_FILENAME}" | grep "bzip2" ; then
tar xjvf "${CWD}/${SRC_FILENAME}" || exit 1
elif file "${CWD}/${SRC_FILENAME}" | grep "gzip" ; then
tar xzvf "${CWD}/${SRC_FILENAME}" || exit 1
elif file "${CWD}/${SRC_FILENAME}" | grep "Zip" ; then
unzip "${CWD}/${SRC_FILENAME}" || exit 1
else
echo "ERROR"
echo "Archive file-type unknown"
exit 1
fi- Ansa89
- Iper Master

- Messaggi: 2703
- Iscritto il: mer 29 ago 2007, 17:57
- Nome Cognome: Stefano Ansaloni
- Slackware: 14.2 64bit
- Kernel: 4.9.61
- Desktop: XFCE 4.12
- Località: Modena
Re: Bash [totale neofita] - Creazioen script estrazione universa
Credo ci sia un errore nel tuo script: tu usi sempre il comando tar, dando per scontato che l'archivio sia *.tar.[bz2,gz].
Questo non è sempre vero: il file potrebbe essere semplicemente compresso come gzip (bzip2), senza per forza essere un tape archive.
Questo non è sempre vero: il file potrebbe essere semplicemente compresso come gzip (bzip2), senza per forza essere un tape archive.
-
Mario Vanoni
- Iper Master

- Messaggi: 3174
- Iscritto il: lun 3 set 2007, 21:20
- Nome Cognome: Mario Vanoni
- Slackware: 12.2
- Kernel: 3.0.4 statico
- Desktop: fluxbox/seamonkey
- Località: Cuasso al Monte (VA)
Re: Bash [totale neofita] - Creazioen script estrazione universa
Per *.bz2:
find -name '*.bz2'
find -name '*.bz2'
- sardylan
- Linux 3.x

- Messaggi: 993
- Iscritto il: mar 24 apr 2007, 9:21
- Nome Cognome: Luca Cireddu
- Slackware: current 64bits
- Kernel: 3.16
- Desktop: KDE 4.14
- Distribuzione: Debian - CLFS
- Località: Cagliari
- Contatta:
Re: Bash [totale neofita] - Creazioen script estrazione universa
Si... E' vero... Solo che quella parte, come ho detto, fa parte degli SlackBuilds, e più che altro va per gli archivi dei sorgenti... Comunque cio che contra è il principio di funzionamento... Infatti ho detto di fare delle prove con il comando per vedere che tipo di output restituisce il comando "file"...Ansa89 ha scritto:Credo ci sia un errore nel tuo script: tu usi sempre il comando tar, dando per scontato che l'archivio sia *.tar.[bz2,gz].
Questo non è sempre vero: il file potrebbe essere semplicemente compresso come gzip (bzip2), senza per forza essere un tape archive.
-
albatrosla
- Packager

- Messaggi: 1339
- Iscritto il: sab 27 mar 2004, 0:00
- Slackware: current
- Desktop: fluxbox.git
- Località: Collegno, but made in Friûl
- Contatta:
Re: Bash [totale neofita] - Creazione script estrazione universa
Usare il comando "file" è certamente la cosa migliore, potendosi così slegare dal problema di isolare l'estensione completa dal nome del file (in questo modo si è sufficientemente flessibili da poter estrarre anche file con nomi contenenti ".", che potrebbero facilmente indurre in errore lo script). Il problema delle compressioni multiple (tar.bz2, ad es.) è che "file" ti restituisce solo l'ultima compressione (nella fattispecie bz2). Perciò è utile fare un loop che controlla se ci sono ulteriori compressioni e continua ad estrarre col tool opportuno fintanto che trova un file compresso (in questo modo si potrebbe estrarre qualcosa tipo rar.tar.gz.bz2 se qualche malato si è prestato ad un tanto inutile quanto diabolico artificio).
Dunque, io userei qualcosa di simile a questo:
E' chiaro che devi aggiungere alla lista dei "case" tutti i casi possibili.
P.S. Il suddetto script (se non ha altri errori, visto che è stato scritto in 1 minuto, a sentimento) si basa sul fatto che l'estensione sia scritta in forma tradizionale (es. tar.bz2, tar, tar.gz, rar, etc... Nulla può con i file nominati in modo ostrogoto (ad es. l'estensione tgz utilizzata come contrazione di tar.gz).
Dunque, io userei qualcosa di simile a questo:
Codice: Seleziona tutto
current_filename = $1
function recheck {
if `echo $current_filename | grep -q "\."`
then
current_filename = `echo current_filename | sed s/\.[a-zA-Z0-9]*$//`
else
re-check = 0
fi
}
while [[ re-check != 0 ]]
do
filetype = `file $current_filename | cut -d':' -f2 | cut -d' ' -f1`
case filetype in
tar) untar $current_filename;;
bzip2) bunzip2 $current_filename;;
*) exit;;
esac
recheck
doneP.S. Il suddetto script (se non ha altri errori, visto che è stato scritto in 1 minuto, a sentimento) si basa sul fatto che l'estensione sia scritta in forma tradizionale (es. tar.bz2, tar, tar.gz, rar, etc... Nulla può con i file nominati in modo ostrogoto (ad es. l'estensione tgz utilizzata come contrazione di tar.gz).
- Ansa89
- Iper Master

- Messaggi: 2703
- Iscritto il: mer 29 ago 2007, 17:57
- Nome Cognome: Stefano Ansaloni
- Slackware: 14.2 64bit
- Kernel: 4.9.61
- Desktop: XFCE 4.12
- Località: Modena
Re: Bash [totale neofita] - Creazione script estrazione universa
Il comando "untar" non credo esista (almeno sul mio sistema).
Per evitare questo problema si può usare l'output del comando "file" (come hai detto anche tu).albatrosla ha scritto:Nulla può con i file nominati in modo ostrogoto (ad es. l'estensione tgz utilizzata come contrazione di tar.gz).