unzip script unix [chiuso]


-6

Sono un nuovo utente per unix che sta provando a fare un semplice script in bash che decomprimerà diversi file nella posizione che elenco. Non riesco a capire perché continua a bloccarsi. Sto inserendo la sceneggiatura qui sotto. Spero di spostare in seguito i vecchi file zip .tar.7z in un'altra directory (da qui la mia creazione della nuova directory nello script seguente), ma sto solo cercando di far funzionare prima la parte principale.

#!~/bash
# My program to try to unzip several files with ending of tar.7z
# I have inserted the ability to enter the directory where you want this to be done 

echo "What file location is required for unzipping?"

read dirloc

cd $dirloc
mkdir oldzippedfiles
for directory in $dirloc
        do
                if
                [ $directory=*.tar.7z ]
                then
                cat $directory | 7za x -an -txz -si -so | tar -xf -
        fi
        done

echo "unzipping of file is complete"

exit 0

4
Cosa intendi per crash? Hai una linea shebang sbagliata è un errore di battitura? Che errore stai ricevendo? Sei su Unix o Linux? Se Linux, quale Linux? Perché stai usando cat? Potresti dare un esempio di una directory su cui vuoi eseguire questo script?
terdon,

Scusa, sono su una macchina Linux. Quando ho detto che stava andando in crash, la finestra del terminale si è chiusa. Stavo usando il comando cat per leggere il contenuto del file. Quindi, questo mi porta all'ovvia cosa che stavo facendo di sbagliato e che la directory (sopra) dovrebbe essere sostituita con il nome del file - mi dispiace di essere così poco chiaro, ma ho ottenuto l'esecuzione dello script. Grazie
user1004856

3
Come hai fatto a farlo funzionare?
slhck

Risposte:


2

Ci sono molti errori nel tuo script:

  1. #!~/bashnon funzionerà poiché è bash che si espande ~nella tua home directory. Devi specificare il percorso completo per bash (di solito /bin/bash).

  2. for directory in $dirloc non funzionerà per due motivi:

    • Per esaminare i file all'interno $dirloc, è necessario $dirloc/*.

    • Hai già cambiato directory, quindi deve essere chiaro *.

    Inoltre, poiché esegui il ciclo continuo dei file, ti suggerisco di rinominare la tua variabile.

  3. test ( [) non supporta la corrispondenza glob.

    Usa for file in *.tar.7zinvece.

  4. Non è necessario utilizzare cat. Rende le cose più difficili, dal momento che 7zip non può indovinare il formato dell'archivio dall'estensione. -txznon funzionerà, a meno che tu non abbia effettivamente creato un .xzfile con .7zun'estensione (cattiva pratica).

    Usa 7za a -so $directoryinvece.

  5. Non sono sicuro di cosa -andovrebbe fare l' interruttore, ma genera errori e sono quasi certo che non sia necessario.

Una versione funzionante del tuo script dovrebbe apparire così:

#!/bin/bash

read dirloc

cd $dirloc

for file in *.tar.7z
        do
                7za x -so $file | tar -xf -
        done

1
Questo è appena leggibile come commento. Puoi pubblicare il tuo approccio corretto come risposta se funziona.
Dennis
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.