Skip to main content  
        iSeries home   |   Easy400     |   CGIDEV2     |   MMAIL  
Public-Source
 
Introduzione
 Set di comandi 1
Set di comandi 2
Appendice A
Appendice B
 Scarica questo tool
 
 

 
ZIP e UNZIP - Set di comandi 1

Questo "set" riguarda i comandi zip e unzip che vengono installati nella QShell (un ambiente di comandi basato su POSIX e standard X/Open).
Istruzioni riguardanti questi comandi si possono trovare nell' IBMi Redbook IBM HTTP Server (powered by Apache), APPENDIX C: Bringing Zip and Unzip to i5/OS PASE and Qshell Environments di Brian Smith.

La nostra utility - durante il suo processo di installazione - si occupa di installare questi comandi, quindi vi risparmia di farlo manualmente.
L'Appendice A mostra come usare questi comandi nell'ambiente QShell.

Ai programmatori RPG, tuttavia, occorre qualcosa di più gestibile. Per questo motivo abbiamo sviluppato due semplici comandi - ZIP e UNZIP - che si agganciano a quelli della QShell.

Dopo aver installato questa utility ci si può esercitare con i file a.txt e b.txt nell'indirizzario IFS /zip/test.

1 - Comando ZIP/ZIP

                             Zip stream files (ZIP)
                                                                                
 Type choices, press Enter.                                                     

 Target zip file . . . . . . . . TGTZIP  /tmp/myZipFile.zip                        
                             
 Stream files / directories. . . STMFS   /zip/test/a.txt                           
                              
                     + for more values   /zip/test/b.txt                           
                                                                               
 Don't record directory names. . JUNK    *YES        *YES, *NO
 Update the existing zip file  . UPDZIP  *NO         *YES, *NO
 Replace target zip file . . . . REPLACE *NO         *YES, *NO
 Output messages . . . . . . . . DSP     *           *, *PRINT, *NONE, *YES, *NO
Figura 1 - Comando ZIP

Utilizzare questo comando per creare un file di flusso "zip" contenente uno o più oggetti IFS compressi.

  • Target zip file (TGTZIP) - Il file di flusso "zip" di arrivo.
  • Stream files / directories (STMFS) - Fino a 50 nomi di oggetti IFS da comprimere. Ogni oggetto può essere
    • un file di flusso (esempio: /tmp/a.txt), oppure
    • un indirizzario (esempio: /tmp). Quando si specifica un indirizzario, vengono presi tutti gli oggetti di quell'indirizzario.
    Nota 1: Nomi generici - terminanti con un asterisco (*) - non sono supportati.
  • Don't record directory names (JUNK) - Di solito il comando ZIP della QShell (che viene eseguito dal comando ZIP/ZIP) include - nel file zip - i path (nomi degli indirizzari) degli oggetti zippati. Se invece si specifica JUNK(*YES), il comando ZIP della QShell viene eseguito senza il descrittore -j e questo fa sì che i path (nomi degli indirizzari) degli oggetti zippati vengano ignorati..
  • Update the existing zip file (UPDZIP) - Celte possibili:
    • *NO - Il contenuto dello zip file sarà totalmente nuovo. Se lo zip file esiste già, va specificato REPLACE(*YES).
    • *YES - Se lo zip file esiste già, i file compressi già esistenti vengono aggiornati ed i nuovi vengono aggiunti. Il parametro REPLACE viene ignorato.
      Se invece lo zip file non esiste, viene emesso un messaggio di escape ed il comando va in errore.
  • Replace target zip file (REPLACE) - Se il file zip di arrivo debba essere sostituito qualora esista già.
    Nota. Il valore di questo parametro viene ignorato quando UPDZIP(*YES).
  • Output messages (DSP) -Specifica se e come i messaggi emessi dallo ZIP della QShell debbano essere visualizzati.
    Scelte possibili:
    • * o *YES - Se il comando è eseguito in ambiente interattivo, i messaggi compaiono sullo schermo; altrimenti vengono registrati su un file di stampa di nome QSYSPRT.
    • *PRINT - I messaggi vengono registrati su un file di stampa di nome QSYSPRT.
    • *NONE o *NO - Non viene restituito alcun messaggio.
    Esempio di messaggi:
      adding: a.txt (deflated 2%)
      adding: b.txt (deflated 2%)                    
    Figura 3 - Messaggi dal comando ZIP
Nota 2: Il comando "zip" della Qshell non supporta la cifratura.
Nota 3: Gli oggetti da zippare non possono superare la dimensione di 2 Gigabyte. In caso oggetti di dimensioni superiori a questo limite, il comando "zip" della QShell invia un messaggio di errore.


2- Visualizzare il contenuto di un file zip

Il comando "zip" della QShell non prevede di poter comunicare il contenuto di un file zip.
Tuttavia, il contenuto di uno zip file può essere visualizzato con il comando ZIP/DSPZIP2 (nella pagina successiva) basato sul comando "Jar" della QShell.

Esempio- Se si visualizza il contenuto del file "/tmp/myZipFile.zip" creato in Figura 1, si ottiene questo:
    64 Sat Sep 23 17:44:00 UTC 2017 a.txt
    64 Sat Sep 23 17:44:20 UTC 2017 b.txt
Figura 4 - Contenuto di un file zip


3- Il comando ZIP/UNZIP

                           Unzip a stream file (UNZIP)
                                                                                
 Type choices, press Enter.                                                     
                                                                                
 Stream file. . . . . . . . . . STMF     '/tmp/myZipFile.zip'                   
                              
 Target directory. . . . . . . . TGTDIR   '/tmp2'                                
                              
 Password if encrypted file. . . PASSWORD *NONE              
 Output messages. . . . . . . . DSP     *        *, *PRINT, *NONE, *YES, *NO
Figura 5 - Il comando UNZIP

Si usi questo comando per fare l'unzip di (per decomprimere) un file di flusso.
Nota 3: Il comando ZIP/UNZIP esegue il comando UNZIP della QShell con il descrittore -j. In questo modo, il path (nome indirizzario) di un file zippato viene ignorato ed il file viene espanso nell'indirizzario specificato dal parametro TGTDIR.

  • Stream file (STMF) - Il file di flusso da sottoporre a decompressione.
  • Target directory (TGTDIR) - L'indirizzario IFS in cui i file compressi (zippati) vanno decompressi.
  • Password if encrypted file (PASSWORD) - Se il file zip è cifrato, questo parametro consente di specificare la password di protezione.
    Se il file zip non è criptato, si lasci la default PASSWORD(*NONE).
    ATTENZIONE - La password è sensibile ai caratteri maiuscoli/minuscoli. Se la password contiene caratteri minuscoli, va racchiusa tra doppi apici (").
  • Output messages (DSP) -Specifica se e come i messaggi emessi dallo ZIP della QShell debbano essere visualizzati.
    Scelte possibili:
    • * o *YES - Se il comando è eseguito in ambiente interattivo, i messaggi compaiono sullo schermo; altrimenti vengono registrati su un file di stampa di nome QSYSPRT.
    • *PRINT - I messaggi vengono registrati su un file di stampa di nome QSYSPRT.
    • *NONE o *NO - Non viene restituito alcun messaggio.
    Esempio di messaggio restituito:
    Archive:  /tmp/myZipFile.zip
      inflating: /tmp2/a.txt
      inflating: /tmp2/b.txt                                 
    Figura 6 - Messaggi dal comando UNZIP
Noa 4: A tutti i file decompressi viene sempre assegnato il CCSID 819 (ASCII), mentre i loro dati mantengono il loro CCSID originale. Pertanto, se i dati del file originale avevano un CCSID diverso da 819, i dati del file decompresso risultano illeggibili sintantochè all'oggetto non viene ridato il CCSID originale. Il programma UNZIP non ha alcun modo per sapere quale era il CCSID originale del file compresso, pertanto l'utente è responsabile per ripristinare al file decompresso il suo CCSID originale (il caso non si pone solo se il file in causa aveva già originariamente il CCSID 819). Per restituire ai dati del file decompresso il loro CCSID originale si può usare il comando CHGATR.
Esempio: si ipotizzi che ai dati del file decompresso /tmp2/a.txt debba essere riassegnato l'originario CCSID 037. Basterà eseguire questo comando:
CHGATR OBJ('/tmp2/a.txt') ATR(*CCSID) VALUE(37) .