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.