Ubah direktori kerja

13

Saya mencoba mengompres direktori di

/home/cyrus/sql

Dan saya ingin mengubah direktori kerja ketika zip folder:

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

Tetapi ketika saya memeriksa file 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

Folder root seharusnya sql. Apa yang telah saya lakukan salah?

Jürgen Paul
sumber

Jawaban:

10

Dari man zip:

-b path

 --temp-path path

Gunakan jalur yang ditentukan untuk arsip zip sementara. Sebagai contoh:

zip -b /tmp stuff *

akan menempatkan arsip zip sementara di direktori / tmp, menyalin lebih dari stuff.zip ke direktori saat ini ketika selesai. Opsi ini berguna ketika memperbarui arsip yang ada dan sistem file yang berisi arsip lama ini tidak memiliki cukup ruang untuk menyimpan arsip lama dan baru pada saat yang bersamaan. Mungkin juga berguna saat streaming dalam beberapa kasus untuk menghindari kebutuhan deskriptor data. Perhatikan bahwa menggunakan opsi ini mungkin memerlukan waktu tambahan zip untuk menyalin file arsip ketika dilakukan ke sistem file tujuan.

Secara default zipmenyimpan path lengkap relatif ke direktori saat ini. Jika Anda ingin zipfile memiliki sqldirektori Anda sebagai root, Anda harus menjalankan perintah dari /home/cyrusdirektori.

MattDMo
sumber
14

Jika Anda ingin zipkonten direktori yang diberikan dan menyimpan zipfile di direktori saat ini, Anda dapat menulisnya:

(cd /some/dir && zip -r - dir-there) > file.zip
Stéphane Chazelas
sumber
5

-bmenentukan di mana zipharus meletakkan file sementara, bukan itu harus mengubah direktori di suatu tempat. Dari man zip:

 -b path
      Use the specified path for the temporary  zip  archive.

Coba ini:

cd /home/cyrus && zip sql.zip sql
Chris Down
sumber
Atau cd /home/cyrus && zip /sql.zip sqljika Anda ingin file zip dibuat di root.
tripleee
2

tidak yakin apakah saya mengerti ini benar tetapi -b tidak akan mengubah folder root. Ini akan menempatkan arsip zip sementara di direktori / home / cryus, menyalin lebih dari sql.zip ke direktori saat ini ketika selesai. Opsi ini hanya berguna ketika memperbarui arsip yang ada, dan sistem file yang mengandung arsip lama ini tidak memiliki cukup ruang untuk menyimpan arsip lama dan baru pada saat yang bersamaan.

coba gunakan:

-j Simpan hanya nama file yang disimpan (junk the path), dan jangan menyimpan nama direktori. Secara default, zip akan menyimpan path lengkap (relatif terhadap path saat ini).

Raza
sumber
1
-jmungkin tidak benar; Saya akan berasumsi OP ingin menjaga jalur relatif, tidak menghapus semua jalur.
tripleee
2

Terinspirasi oleh jawaban Stephane:

(cd /home/cyrus; zip -r sql.zip sql;)

Hasil:

  1. Anda memiliki sql.zip di / home / cyrus /
  2. sql.zip berisi sql / direktori dan semua kontennya
  3. Anda PWD awal tidak berubah
Dmitrii Cretu
sumber
4
Bagaimana ini lebih baik?
Stephen Rauch
0

Mungkin lebih mudah untuk menyinkronkan folder yang Anda coba zip ke direktori saat ini. Dengan begitu Anda bisa tetap di tempat Anda sekarang.

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

Mereka symlink jika Anda inginkan.

Jonr
sumber