Come faccio a comprimere una cartella usando la riga di comando mantenendo la sua struttura di file?

1

Ad esempio, se voglio comprimere /Users/admin/Downloads/Backup e sono a /Users/admin/ , potrei:

zip -r downloads.zip /Users/admin/Downloads/Backup

e se decomprimo downloads.zip otterrei una cartella Utenti e avrò Utenti = > admin = > Download = > Struttura di backup.

Questo comportamento è particolarmente indesiderato se voglio creare un file zip di installazione per TWRP.

Quindi dovrò:

cd /Users/admin/Downloads/Backup; zip -r /Users/admin/downloads.zip .; cd /Users/admin/

Questo non sembra ciò che un professionista farebbe.

Che cosa posso fare per comprimere una cartella mantenendo la sua struttura di file?

    
posta aeroxy 10.11.2018 - 14:54
fonte

2 risposte

0

Un "pro" dovrebbe prima leggere il manuale. Ora, il zip manuale è pieno di cruft ma a lungo nella lettura troverai- "zip memorizzerà il percorso completo (relativo alla directory corrente).". Più avanti nella lettura troverai un'opzione per rimuovere tutti i percorsi nel tuo archivio zip, ma non è una grande idea, dato che puoi creare un archivio "bomba" che inquinerà la directory in cui viene estratto. È meglio contenere il tuo archivio all'interno della propria directory.

cd /Users/admin/Downloads
zip -r downloads Backup
mv -- downloads.zip some/other/location
cd -
  • Per prima cosa cambiamo directory in / Users / admin / Downloads
  • Denominiamo l'archivio (download) e .zip verrà aggiunto al nome dell'archivio
  • Recurse attraverso la directory di Backup aggiungendo tutti i file inclusa la directory principale all'archivio
  • sposta l'archivio zip in un'altra posizione
  • Infine, chiamiamo la variabile di ambiente OLDPWD per tornare alla directory originale- cd -
risposta data 10.11.2018 - 20:30
fonte
-1

Non sono sicuro se questo è davvero ciò che vuoi, dato che puoi usare la riga di comando o uno script ma ci sono opzioni.

Per prima cosa, non fornire l'intero percorso per l'archivio

 cd folder; zip -r ../zipped_dir.zip *

Oppure per uno script potresti usare cd o pushd e popd per spostarti nella directory che sarà la radice dell'archivio prima di emettere il comando zip. Il modo in cui lo fai dipende esattamente da come lo script sa cosa bloccare. Ma, se per esempio vuoi che admin / Downloads / Backup / cartella sia zippato con percorsi interni di solo ./folder, devi fare questo:

pushd /Users/admin/Downloads/Backup
zip -r /path/to/out.zip ./folder/
popd

Ciò comporterà il tuo out.zip contenente i percorsi relativi che desideri.

    
risposta data 10.11.2018 - 17:52
fonte

Leggi altre domande sui tag