Estrai diversi file zip, ognuno in una nuova cartella con lo stesso nome, tramite il terminale Ubuntu


37

Ho molti file zip a.zip, b.zip, c.zip, ... e voglio estrarre ciascuno di essi in nuove cartelle a, b, c, ... rispettivamente, tramite terminale.

In realtà, quello che voglio è una soluzione che posso usare in seguito con a findperché in realtà ho molte cartelle 2014, 2013, 2012, ... ognuna contenente molti file zip a.zip, b.zip, ecc. Se lo faccio find . -name "*.zip" -exec {} unzip \;decomprimerà tutti i file e li inserirà nella rispettiva cartella principale.


Risposte:


72

Dovresti essere in grado di utilizzare l' -dopzione di decompressione per impostare una directory alternativa per i contenuti dell'archivio.

unzip -d a a.zip
unzip -d b b.zip

e così via. All'interno di findun'espressione, dovresti essere in grado di derivare il nome della directory dal nome del file zip usando l'espansione dei parametri della shell, ad es.

find -name '*.zip' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;

Provalo prima aggiungendo un echoie

find -name '*.zip' -exec sh -c 'echo unzip -d "${1%.*}" "$1"' _ {} \;

o qualcosa del genere

while read -rd $'\0' f; do 
  unzip -d "${f%.*}" "$f"
done < <(find -name '*.zip' -print0)

2
+1 per la test it first…parte
— mrzmyr

2
findha bisogno di una directory, quindifind . -name ...
— slf

@slf POSIXly, yes - ma non nel caso di GNU find( "Se non viene specificato un punto di partenza, .si assume." )
— steeldriver

10

Sono venuto a cercarlo da solo, solo per rendermi conto che l'avevo già fatto con altri comandi e poteva essere applicato praticamente a qualsiasi altra cosa, come lo stavo già facendo.

Il metodo find è folle e complicato senza motivo.

for i in *.zip; do unzip "$i" -d "${i%%.zip}"; done

Questa è senza dubbio la migliore risposta alla domanda in corso. Il precedente è ridicolo e quello successivo non si ordina nei file delle rispettive cartelle principali.
— TheMegolith

Come si potrebbe creare la directory senza il .zipsuffisso? Chiedere un amico.
— Dashard,

La risposta non crea una directory con un suffisso .zip, ovvero il punto stesso della porzione all'interno delle parentesi graffe.
— kinder

6

Usa semplicemente

unzip '*.zip' -d /home/user/folder/

11
A meno che non mi manchi qualcosa, questo decomprimerà tutto in / home / utente / cartella, non in / home / utente / cartella / ae / home / utente / cartella / b
— M. Giustino

1

Ho anche dovuto farlo usando unrar. Ciò può essere ottenuto modificando leggermente il codice di Kencinder.

for i in *.rar; do mkdir "${i%%.rar}"; unrar x -r "$i" "${i%%.rar}"; done 

PS: volevo aggiungere questo come commento ma non ho abbastanza punti reputazione!

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.