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

の一部を保ち、それは私がから解凍していますいずれかのフォルダから/home/username/the_folderを、作成します。ジップ絶対パスを記述しますが、私は<code>1.zip</code>を解凍したときにのみ、ここではそれら

完全な絶対パスを指定しますが、この場合は/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をチェックアウトするために-j'が動作しない場合は ' –

+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シェル機能として上記の定義と、あなたはいつでもそれを使用することができるはずです。 使用方法は次のようになります。

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

私は実際にそのコードを読むことができません、そして、これはより複雑なzipコマンドを作成し始めるときにこれが問題を引き起こさないでしょうか? –

-1

だけ-jオプションを使用するには、OSX上で動作しますが、私はLinuxについて知りません。

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

+0

エラーが表示されるのは、そのフォルダ内に同じ名前のファイルが2つ存在するためです。それらは異なるサブフォルダにありますが。 –

+6

私が忘れていた '-j'オプションは' -r'オプションをつけて使用すると実用的ではありません。なぜなら、フォルダ構造を持たないルートフォルダのすべてのファイルを圧縮するからです。 – jackjr300

+0

あなたは[この回答](http://superuser.com/a/119661/45285) – czerasz

関連する問題