2012-06-28 22 views
9
zip -r 1.zip /home/username/the_folder 

的一部分。在這裏,當我解壓1.zip,它會創建/home/username/the_folder,從哪個文件夾我從解壓。郵編說明絕對路徑,但只有讓他們

我該如何壓縮,說明完整的絕對路徑,但使壓縮包含文件夾結構開始,在這種情況下,例如/home/username

這樣,我可以在任何我想要的路徑,解壓縮,它只會創建the_folder,而不是/home/username/the_folder

回答

9

使用此命令:

cd path_under_folder_to_zip && \ 
zip -r 1.zip folder_to_zip >/dev/null && \ 
mv 1.zip my_current_path 
+0

cd path_under_folder_to_zip && zip -r my_current_path/1.zip folder_to_zip>/dev/null –

+0

在macOS上很好用:)謝謝。 –

5

指定要壓縮的文件時使用相對路徑。

cd /home/username 
zip -r 1.zip ./the_folder 

然後,當你解壓縮時,它將成爲一個相對路徑,從解壓縮時的任何文件夾開始。

+0

他希望能夠使用絕對路徑。請注意'我想要的任何路徑'。儘管你所說的話是有道理的。 –

1
  1. 列表項

如何:

function zipExtraFolder { 
    if [ $# -lt 2 ]; then 
     echo "provide at least two arguments" 
     return 
    fi 
    folder=$2 
    mkdir del 
    echo cp -r `dirname $folder` del 
    cd del 
    echo zip -r ../$1 . 
    cd - 
    rm -rf del 
} 

上面的定義在你的.bashrc shell函數,你應該可以,只要你想使用它。 用法如下。

zipExtraFolder 1.zip /home/username/the_folder 
+0

我無法真正閱讀該代碼,並且當我開始製作更復雜的zip命令時,這不會導致問題嗎? –

-1

只需使用-j選項,適用於OSX,我不知道Linux操作系統。

zip -j -r 1.zip /home/username/the_folder

+0

我得到一個錯誤,顯然是因爲在該文件夾中有兩個具有相同名稱的文件實例。即使它們位於不同的子文件夾中。 –

+6

我忘記了,'-j'選項與'-r'選項一起使用時不實用,因爲它會壓縮根文件夾中沒有文件夾結構的所有文件。 – jackjr300

+0

如果'-j'不適用於您結帳[此答案](http://superuser.com/a/119661/45285) – czerasz