Zielsetzung:
Weisen Sie nach dem Erweitern des Archivs a.zip
mit dem Befehl unzip
on Ubuntu 12.10
den Namen des Ordners a.zip
zu, auf den die bash
Variable erweitert wurde v
.
a.zip
Es wird davon ausgegangen, dass die Erweiterung auf einen einzelnen Ordner und nicht auf mehrere Ordner erfolgt.
Beispiel:
Wenn unzip a.zip
in Ordner erweitert ./foo/
, echo $v
sollte zurückkehren foo
.
Meine Umgebung:
GNU/Linux (kernel 3.5.0-25-generic)
Ubuntu 12.10
bash v4.2.37(1)-release
UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP.
Aktuelle Problemumgehung Ich bin unzufrieden mit: Erweitern über gibt unzip -d bar a.zip
dann v=$(ls -1 bar)
das richtige Ergebnis, bringt aber das Dateisystem durcheinander.
-m1
aufgrep
und ich wusste nicht ,cut
über bis zum Ende Druck-fN-
(letzte Feldnummer weggelassen). Du hast mir etwas beigebracht! Dafür -> upvote! Haben Sie nicht nur ein Tool verwendet (z. B.awk
), weil 1.grep
undcut
weiter verbreitet sind alsawk
und 2. Sie finden, was Sie geschrieben haben, "lesbarer"? Ich würde gerne Ihre Begründung hören, da man einen Einzeiler wie folgt zusammenstellen könnte : stackoverflow.com/questions/15776352 PS: Sie brauchen keine Anführungszeichen, keine Wortaufteilung in Bash zur variablen Zuweisungszeit.v=$(echo a b)
ist das gleiche wiev="$(echo a b)"
cut
als mitawk
. Es ist meiner Meinung nach auch etwas lesbarer. Dieser Einzeiler ist interessant. Ich muss mehr darüber lesenawk
. Die Verwendung von Anführungszeichen in Variablenzuweisungen ist eine schlechte Angewohnheit von mir, die sich aus einem Texteditor ergibt, der den Text in Anführungszeichen schön gefärbt hat. Außerdem ist meine Standardsprache C.unzip -l
den Inhalt des Archivs auflisten und die Ausgabe analysierendiff
quelle
Das AVFS- Dateisystem bietet eine Ansicht des Dateisystems, in der auf jede Archivdatei
/path/to/foo.zip
als Verzeichnis zugegriffen werden kann~/.avfs/path/to/foo.zip#
.Wenn dieser
ls
Befehl ein einzelnes Verzeichnis anzeigt, wird beim Entpacken der Zip-Datei dieses Verzeichnis und darunter liegende Dateien erstellt. Beachten Sie, dass eine Zip-Datei möglicherweise auf diese Weise organisiert ist oder nicht.Hier ist ein Ausschnitt, der Ihre Annahme überprüft und
dir
gegebenenfalls den Verzeichnisnamen festlegt . Warnung: Wenn die Zip-Datei Dateien enthält, deren Name mit einem.
(Punktdateien) beginnt , werden sie ignoriert.quelle
Seien Sie mit Ihrer Problemumgehung unzufrieden, wenn Sie möchten, aber es ist tatsächlich die richtige Lösung.
Dies ist ausführlich, aber - solange es wirklich nur ein Verzeichnis in der Zip-Datei gibt, das Sie wahrscheinlich zuerst überprüfen sollten - ist es zuverlässig.
ls
undgrep
ist weniger zuverlässig, da es davon abhängt, wie die Ausgabe aussieht. In einem anderen Gebietsschema ist möglicherweise keine Zeichenfolge "create:" vorhanden. In der nächsten Version von unzip kann es aus beliebigen Gründen geändert werden.quelle