Datei im Zip-Archiv mit unterschiedlichem Namen speichern (Linux-Befehlsshell)

9

In einer Linux-Befehlszeile komprimieren Sie eine Datei mit:

zip -mqj archive.zip file.txt

Jetzt muss ich 'file.txt' als 'file2.txt' in 'archive.zip' speichern, ohne die Datei vor dem Zippen umzubenennen. Beim Entpacken sollte die Datei 'file2.txt' heißen.

Wie kann ich die Datei unter einem anderen Namen speichern? Lesen Sie die MAN-Seite durch und finden Sie keine Antwort.

Trident Splash
quelle

Antworten:

2

Zählt es, einen festen Link zu file.txt zu erstellen?

ln file.txt file2.txt

Erstellen Sie file2.txt, die auf genau den gleichen Inode wie file.txt verweist, ohne den Speicherplatz zu verdoppeln

Matt Simmons
quelle
9

Siehe /programming/16710341/linux-zip-command-add-a-file-with-different-name

Die folgende Lösung ist die genaue Kopie der Antwort von @mkrnr auf stackoverflow

Sie können zipnote verwenden, das mit dem zip-Paket geliefert werden sollte.

Erstellen Sie zuerst das Zip-Archiv mit der Datei myfile.txt:

zip archive.zip myfile.txt

Benennen Sie dann myfile.txt im Zip-Archiv um mit:

printf "@ myfile.txt\n@=myfile2.txt\n" | zipnote -w archive.zip

(Danke an Jens für den Vorschlag printfstatt echo -e.)

Eine kurze Erklärung von "@ myfile.txt\n@=myfile2.txt\n":

Von zipnote -h: Auf "@ name" kann eine Zeile "@ = newname" folgen, um den Namen zu ändern

Und \ntrennt die beiden Befehle.

pihentagy
quelle
2

Hy da, das ist meine erste Antwort, also hoffe ich, dass ich alles richtig gemacht habe :-)

Hier ist meine Lösung für Ihr Problem, ein netter Einzeiler:

cp file.txt file2.txt | zip -mqj archive.zip file2.txt

Hoffe ich konnte helfen!

Hajowieland
quelle
5
Dies ist ein guter Versuch, aber die Pfeife ist verwirrend. Ich denke, die Person, die gefragt hat, wollte nicht zuerst eine Kopie der Datei erstellen, aber wenn ja, könnte eine andere Möglichkeit dies sein: cp file.txt file2.txt && zip -mqj archive.zip file2.txt && rm -f file2.txt - Dies würde die temporäre file2.txt bereinigen, die erstellt wurde.
Matt Simmons
2
danke für den Hinweis - ich würde diesen Ansatz auch posten (aber Sie haben es bereits getan, danke!) cp file.txt file2.txt && zip -mqj archive.zip file2.txt (wegen des -m-Schalters, den die Datei bereits erhält bewegt und es besteht keine Notwendigkeit, danach zu entfernen!)
hajowieland
Ah! Guter Anruf. Ich kenne Zip weniger als Teer. Vielen Dank!
Matt Simmons
@ Matt. Wir können nicht einfach mv anstelle von cp verwenden, das keine Kopie erstellt, die Datei umbenennt, komprimiert und die Kopie entfernt, um Speicherplatz freizugeben. Nur ein Gedanke.
Viky
@Viky - Das würde gut funktionieren, außer dass eine der Anfragen in der Frage war, dass wir die Datei nicht umbenennen. Ich denke, wenn wir mehr über die Situation erfahren hätten, hätte sich eine bessere Antwort ergeben, aber solange die Person, die die Frage gestellt hat, glücklich ist ...
Matt Simmons