2010-11-27 11 views
5

nehme ich dieses dir zip wollen 〔C:/Users/XAH/ErgoEmacs_Source/ergoemacs/build-util /〕Erstellen von Zip, ohne Stammpfade aufzuzeichnen; programmatisch

und meine ich möchte die Ausgabe dir 〔c:/Users/XAH/xx2 /〕

(mein aktuell dir überall sein könnte. ich rufe zip in einem elisp Programm) so tun i

zip -r c:/Users/xah/xx2/build-util.zip c:/Users/xah/ErgoEmacs_Source/ergoemacs/build-util/ 

den vollständigen Pfad wie diese

dann aufzeichnen zip
adding: Users/xah/ErgoEmacs_Source/ergoemacs/build-util/ (stored 0%) 
adding: Users/xah/ErgoEmacs_Source/ergoemacs/build-util/.svn/ (stored 0%) 
adding: Users/xah/ErgoEmacs_Source/ergoemacs/build-util/.svn/all-wcprops (deflated 56%) 
... 

Ich möchte, dass die Pfade einfach mit build-util beginnen.

hinweis: ich rufe zip in einem programm (elisp) und ich kann oder will kein konzept von envirenment variable.

Ist dies mit einigen zip-Parameter möglich?

+1

AFAIK gibt es keine Tar-C-Option für Zip, so dass Sie das aktuelle Verzeichnis ändern müssen, bevor Sie es ausführen. – tokland

+0

hmmm ... 'cd c:/Benutzer/xah/ErgoEmacs_Source/ergoemacs; zip ... ', das gibt relativen Pfad, ist das was du brauchst? möglich mit elisp? – ajreal

+0

danke. Ich denke, Tokland hat darauf geantwortet. Ich wollte nicht zuerst zum Dir cd, das ist das Problem. –

Antwort

4

Seltsamerweise ist die beste Möglichkeit, jar aus dem Java JDK zu verwenden.

jar -cMfc: /Users/xah/xx2/build-util.zip -C:/Benutzer/xah/ErgoEmacs_Source/ergoemacs/build-util /.

Das "-M" sagt jar, dass es keine Manifestdatei erstellen soll, und das -C sagt ihm, dass es die Verzeichnisse wechseln soll, bevor es mit dem Zippen von Dateien beginnt. Die Dokumentation, auf der ich diese basiert, ist hier:

+0

Übrigens ist ein Java-Jar-Archiv nur eine Zip-Datei mit einige manifeste Informationen. –

4

Eine meiner Lieblings-Bash-Funktionen ist Pushd, es speichert die dirrectory Sie gerade in sind und bewegt Sie in das Verzeichnis, das Sie angeben. Die reziproke Funktion ist popd und bringt Sie zurück in das Verzeichnis, in dem Sie vor dem Pushd waren. Zum Beispiel haben Sie

pushd c:/Users/xah/ErgoEmacs_Source/ergoemacs 
zip -r c:/Users/xah/xx2/build-util.zip build-util/ 
popd 

Ich glaube, Sie wickeln mit dem, was Sie wollen.

Verwandte Themen