Çalışma dizinini değiştir


13

Adresindeki bir dizini sıkıştırmaya çalışıyorum

/home/cyrus/sql

Ve klasörü sıkıştırırken çalışma dizinini değiştirmek istedim:

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

Ancak zip dosyasını kontrol ettiğimde:

/ $ 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

Kök klasör olması gerekirdi sql. Neyi yanlış yaptım?

Yanıtlar:


10

Gönderen man zip:

-b path

 --temp-path path

Geçici zip arşivi için belirtilen yolu kullanın. Örneğin:

zip -b /tmp stuff *

geçici zip arşivini / tmp dizinine koyar, bittikten sonra stuff.zip dosyasını geçerli dizine kopyalar. Bu seçenek, var olan bir arşivi güncellerken ve bu eski arşivi içeren dosya sisteminde hem eski hem de yeni arşivleri aynı anda tutmak için yeterli alan olmadığında kullanışlıdır. Veri tanımlayıcılarına duyulan ihtiyacı önlemek için bazı durumlarda akış yaparken de yararlı olabilir. Bu seçeneğin kullanılmasının zip dosyasının hedef dosya sistemine kopyalanması için ek zaman alacağını unutmayın.

Varsayılan olarak zip, tam yolu geçerli dizine göre saklar. Zip dosyanızın sqldizininizi kök olarak almasını istiyorsanız, komutu dizinden çalıştırmanız gerekir /home/cyrus.


15

Eğer isterseniz zip, belirli bir dizinin içeriği ve depolamak zipgeçerli dizinde dosyayı, bunu yazabiliriz:

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

5

-bzipgeçici dosyaları nereye koyması gerektiğini belirtir , dizini bir yerde değiştirmesi gerektiğini değil. Gönderen man zip:

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

Bunu dene:

cd /home/cyrus && zip sql.zip sql

Veya cd /home/cyrus && zip /sql.zip sqlzip dosyasının kökte oluşturulmasını istiyorsanız.
Üçlü

2

Bu doğru anlıyorum emin değilim ama -b kök klasörü değişmez. Geçici zip arşivini / home / cryus dizinine koyar, bittiğinde sql.zip dosyasını geçerli dizine kopyalar. Bu seçenek yalnızca mevcut bir arşivi güncellerken yararlıdır ve bu eski arşivi içeren dosya sisteminde hem eski hem de yeni arşivleri aynı anda tutmak için yeterli alan yoktur.

kullanmaya çalışmak:

-j Yalnızca kaydedilmiş bir dosyanın adını saklar (yolu önemsiz olarak saklar) ve dizin adlarını saklamaz. Varsayılan olarak zip, tam yolu (geçerli yola göre) depolar.


1
-jdoğru olmayabilir; Ben OP tüm yolları kaldırmak değil, göreli yolları tutmak istiyoruz varsayalım.
Üçlü

2

Stephane'nin cevabından ilham aldı:

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

Sonuç:

  1. / home / cyrus / dizininde bir sql.zip var
  2. sql.zip sql / dizinini ve tüm içeriğini içerir
  3. ilk PWD'niz değişmiyor

4
Bu nasıl daha iyi?
Stephen Rauch

0

Geçerli dizine sıkıştırmaya çalıştığınız klasörün simgesine bağlanmak daha kolay olabilir. Bu şekilde bulunduğunuz yerde kalabilirsiniz.

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

İsterseniz symink onları rm.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.