Erstellen Sie einen separaten Ordner für jede zip-Dateien in einem Verzeichnis und entpacken Sie die zip-Dateien
Wenn ich wählen Sie eine zip-Datei und der rechten Maustaste "hier entpacken" einen Ordner mit der zip-Dateiname wird erstellt und der gesamte Inhalt der zip-Datei extrahiert wird, in es.
Allerdings würde ich gerne konvertieren Sie mehrere zip-Dateien, die über die shell.
Aber wenn ich das mache
unzip filename.zip
den Ordner "filename"
ist nicht erstellt, aber Sie alle Dateien, die extrahiert werden, in das aktuelle Verzeichnis.
Ich habe mir die Parameter, aber es gibt keinen solchen parameter.
Ich habe auch versucht
for zipfile in \*.zip; do mkdir $zipfile; unzip $zipfile -d $zipfile/; done
aber die .zip
Verlängerung der 2. $zipfile und 4. $zipfile entfernt werden müssen mit sed.
Wenn ich
for zipfile in \*.zip; do mkdir sed 's/\.zip//i' $zipfile; unzip $zipfile -d sed 's/\.zip//i' $zipfile/; done
es nicht funktioniert.
Wie Ersetze ich die .zip
Erweiterung der $zipfile
richtig?
Gibt es einen einfacheren Weg, als ein shell-Skript aus?
Du musst angemeldet sein, um einen Kommentar abzugeben.
"hier entpacken" ist lediglich ein feature, was
unzip
- wrapper, die Sie verwenden.unzip
wird nur extrahieren, was eigentlich in dem Archiv. Es gibt wohl keine einfachere Möglichkeit, als ein shell-Skript. Abersed
,awk
etc. werden dazu nicht benötigt, wenn Sie eine POSIX-konforme shell:(Sie DARF NICHT entkommen
*
oder Pfadname ausbau wird nicht stattfinden.) Werden Sie sich bewusst, dass, wenn Sie das ZIP-Archiv enthält ein Verzeichnis, wie mit Eclipse-Archiv (was immer enthalteneclipse/
), Sie würden am Ende mit./eclipse*/eclipse/eclipse.ini
in jedem Fall. Hinzufügenecho
vorunzip
für einen Probelauf.ls
Ausgang für alles.ls
ist ein tool für interaktive Suche im Verzeichnis Metadaten. Jegliche versuche der Analysels
Ausgabe mit code gebrochen werden. Globs sind viel mehr einfach UND richtig:for file in *.zip
. Lesen Sie Parsen lsalias lsg='ls | grep '
und dannlsg zip
, das entspricht in derls | grep zip
. Undalias ech='echo "$1" '
undech ok yes again
| erwarten Sie, dassok
nur show, aber das Ergebnis ist, wie "$1" existiert nicht. Es ist genau wie Variablen werden ignoriert. Wenn überhaupt kann man mehr dazu sagen, es wird groß sein. Ty viel.unzip file.zip -d xxx
extrahiert Dateien in Verzeichnis xxx und xxx wird erstellt, wenn Sie es nicht ist. Können Sie die man-Seite für details.Des awk Zeile darunter sollte den job tun:
Sehen die test unten
Hinweis, dass ich entfernt
|sh
am Ende, da meine Reißverschlüsse sind fake-Archive; ich will nur zeigen das generierte Befehlszeile hier.ls *.zip | awk -F'.zip' '{print "unzip \""$0"\" -d \""$1"\""}' | sh
ls
Ausgang für alles. ls ist ein Werkzeug zur interaktiven Betrachtung directory-Metadaten. Jegliche versuche der Analysels
Ausgabe mit code gebrochen werden. Globs sind viel mehr einfach UND richtig:for file in *.txt
. Lesen Sie mywiki.wooledge.org/ParsingLsWenn Sie p7zip, die Kommandozeilen version von 7zip installiert, dann können Sie verwenden:
Fügen Sie die Ordner-Namen und Schrägstrich nach dem schalten-Beispiel:
zip erstellen Sie den Ordner 'newfolder' und entpacken Sie das Archiv in es.
Beachten Sie, dass der trailing slash ist nicht erforderlich, aber ich denke, es ist nur aus Alter Gewohnheit (ich benutze Debian und Ubuntu).
aunpack
von atool wird diese standardmäßig für alle Arten von Archiven.