2012-03-14 88 views
15

我想創建一個zip文件,並且希望保留大部分的目錄結構,但不是從命令行定義的rootdir。我使用的命令是:如何創建一個沒有整個目錄結構的zip文件

zip -r out.zip /foo/bar/ 

我想它經過巴和遞歸添加的所有文件保存與目錄結構(它)。但是我不希望'foo'成爲創建的zip文件中的頂級目錄。我希望酒吧成爲頂級目錄。

有沒有簡單的方法可以解決這個問題?我知道我可以在壓縮之前更改目錄以避免出現問題,但我正在尋找一種不需要此功能的解決方案。

回答

8

我不相信zip有辦法排除頂級目錄。我認爲你最好的選擇是做如下事情: pushd/foo; zip -r out.zip ./bar; POPD;

但是,這正是你說你不想要的答案。

+2

我懷疑'tar -C/foo/bar -c out.tar *'讓他更開心。 – 2012-03-14 21:39:54

+1

我第二個這個。我在Mac上,需要zip而不是tar.gz. pushd似乎是一個非常好的選擇。 – slott 2013-04-14 20:41:56

8

這應做到:

cd /foo/bar/ 
zip -r ../out.zip * 

歸檔將在/foo/out.zip

+1

OP說他不想改變目錄。 – Amala 2013-03-20 18:08:39

+0

這個答案正是OP想要的。應該是被接受的答案。 – Jason 2013-09-15 05:23:25

+0

我正在PHP腳本中運行zip。怎麼辦? – 2014-09-08 21:45:44

-1

如果有人絆倒在此,它並不滿足於上述方案,這裏有個很簡單的解決方法不壓縮長子目錄。它包括暫時用C創建一個文件夾:/,並荏苒簡單地刪除之後:

ZipFiles <- list.files(".../ZipFiles") # Insert your long subdirectory into .../ 

dir.create("C:/ZipFiles") 
dir.create(".../FolderToBeZipped") 
file.copy(from = ZipFiles,to = "C:/ZipFiles") 
zip(".../FolderToBeZipped", 
    files = "C:/ZipFiles") 
unlink("C:/ZipFiles",recursive = TRUE) 

結果則.../FolderToBeZipped.zip/ZipFiles/

的好處是,你不必在執行代碼時位於子目錄(或項目)內。

相關問題