作業ディレクトリの変更

作業ディレクトリの変更

ディレクトリを圧縮しようとしています。

/home/cyrus/sql

フォルダを圧縮するときに作業ディレクトリを変更したいと思います。

/ $ zip -b /home/cyrus sql.zip /home/cyrus/sql

しかし、zipファイルを確認すると、次のようになります。

/ $ unzip -l sql.zip

Archive:  sql.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2013-05-30 10:59   home/cyrus/sql/
  1776642  2013-05-23 10:22   home/cyrus/sql/wordpress.sql
---------                     -------
  1776642                     2 files

ルートフォルダは必要ですsql。私が何を間違っているのでしょうか?

答え1

zip特定のディレクトリの内容をインポートしてzip現在のディレクトリにファイルを保存するには、次のように作成できます。

(cd /some/dir && zip -r - dir-there) > file.zip

あるいは、私のようにtarlibarchiveのコマンドラインインタフェースを使用する方が便利かもしれませんbsdtar

bsdtar -cvf file.zip --format=zip -C /some/dir dir-there

答え2

からman zip

-b path

 --temp-path path

一時zipアーカイブに指定されたパスを使用します。たとえば、

zip -b /tmp stuff *

一時zipアーカイブが/ tmpディレクトリに配置され、完了すると、stuff.zipが現在のディレクトリにコピーされます。このオプションは、既存のアーカイブを更新するときに便利で、古いアーカイブを含むファイルシステムに古いアーカイブと新しいアーカイブの両方を保存するスペースが不足しています。特定の状況でデータ記述子を必要としないようにストリーミングする場合に便利です。このオプションを使用すると、アーカイブファイルをターゲットファイルシステムにコピーするのに余分な時間を費やすためにzipが必要になる場合があります。

デフォルトでは、フルパスzipは現在のディレクトリに基づいて保存されます。 zipファイルのディレクトリがルートになるようにするには、そのディレクトリからコマンドを実行するsql必要があります。/home/cyrus

答え3

圧縮したいフォルダを現在のディレクトリにシンボリックリンクする方が簡単です。これにより、静かにすることができます。

ln -s /path/to/whatever .
zip -r myzip whatever

必要に応じてシンボリックリンクを提供できます。

答え4

私が正しく理解したかどうかはわかりませんが、-bはルートフォルダを変更しません。 /home/cryusディレクトリに一時zipアーカイブを配置し、完了したらsql.zipを現在のディレクトリにコピーします。このオプションは、既存のアーカイブを更新する場合にのみ便利です。古いアーカイブを含むファイルシステムには、古いアーカイブと新しいアーカイブの両方を保持するスペースが不足しています。

以下を試してください。

-jディレクトリ名ではなく、保存されたファイルの名前のみを保存します(パスを無視)。デフォルトでは、zipはフルパス(現在のパスに基づいて)を保存します。

関連情報