2009-07-03 31 views
44

我正在創建一個Python腳本,在其中執行UNIX系統命令。我有一個名爲Binaries.war一個 戰爭檔案即名爲Portal.ear如何使用單個命令在UNIX文件系統中提取JAR並使用JAR命令指定其目標目錄?

門戶耳朵文件駐留在,比如說/家庭/富/酒吧/

jar xf /home/foo/bar/Portal.ear Binaries.war 

將提取二進制耳內存檔.war文件移出/home/foo/bar/Portal.ear歸檔文件到我正在運行腳本的當前目錄中。

如何使用一個命令指定要提取的目標目錄? 我願做這樣的事情Binaries.war提取到目錄/ home /富/酒吧/巴茲

jar xf /home/foo/bar/Portal.ear Binaries.war [into target directory /home/foo/bar/baz] 

我搜索選項的JAR手冊頁和似乎無法找到一個簡單的這樣做的方法。當然,我可以將檔案解壓縮到我當前的目錄中,然後使用mv移動它,但是我希望一次完成此操作,而不是混淆目錄和文件。

回答

57

如果你的jar文件已經有如圖所示的絕對路徑,它是特別容易:

cd /where/you/want/it; jar xf /path/to/jarfile.jar 

也就是說,你有你被Python變化目錄執行的外殼,然後運行提取。

如果您的jar文件還沒有絕對路徑名,那麼您必須將相對名稱轉換爲絕對路徑(通過以當前目錄的路徑作爲前綴),以便jar可以在目錄更改後找到它。

剩下的唯一問題就是路徑名稱中的空白。

56

我不認爲jar工具本身支持這一點,但你可以用解壓「解壓」,並與「-d」選項,指定與輸出目錄的JAR文件,所以像:

$ unzip -d /home/foo/bar/baz /home/foo/bar/Portal.ear Binaries.war 
+0

是的 - 。罐子只是.zip有不同的擴展名。當缺乏「罐子」工具時,有很多工具可以處理拉鍊,可以在陽光下做任何事情(哈哈,壞的雙關語) – zenazn 2009-07-03 15:02:25

+0

這會起作用,但Portal.ear文件很大,而且需要很長時間。我只想從Portal.ear中提取Binaries.war歸檔文件。必須有一種方法可以使用解壓縮來實現。 – 2009-07-03 15:36:54

+0

$ man unzip! 我已經修改了這個問題,只包含Binaries.war文件 – tddmonkey 2009-07-03 15:56:44

1

難道你不能只使用os.chdir(target)來改變python腳本中的工作目錄嗎?我同意,我從jar命令本身看不到任何方式。

如果您不想永久更改目錄,則將當前目錄(使用os.getcwd())存儲在變量中,然後再返回。

1

如果這是一個個人的腳本,而不是一個你在分配計劃,它可能是簡單的寫了這一個shell函數:

function warextract { jar xf $1 $2 && mv $2 $3 } 

然後你可以從Python的調用,像這樣:

warextract /home/foo/bar/Portal.ear Binaries.war /home/foo/bar/baz/ 

如果你真的喜歡它,你可以使用sed來從路徑解析出文件名,讓你能夠與

warextract /home/foo/bar/Portal.ear /home/foo/bar/baz/Binaries.war 
叫它

雖然,我會把它作爲練習的讀者。

當然,因爲這會首先將.war拖出到當前目錄中,然後移動它,它可能會覆蓋你所在的同名的東西。改變目錄,提取它,然後重新啓動它有點乾淨,但是當我想要減少代碼混亂時,我總是會使用像這樣的單行shell函數。

相關問題