ディレクトリを圧縮しようとしています。
/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
あるいは、私のようにtar
libarchiveのコマンドラインインタフェースを使用する方が便利かもしれません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はフルパス(現在のパスに基づいて)を保存します。