เปลี่ยนไดเรกทอรีทำงาน


13

ฉันพยายามบีบอัดไดเรกทอรีที่

/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โฟลเดอร์รากควรจะได้รับ ฉันทำอะไรผิด

คำตอบ:


10

จากman zip:

-b path

 --temp-path path

ใช้พา ธ ที่ระบุสำหรับไฟล์ zip ชั่วคราว ตัวอย่างเช่น:

zip -b /tmp stuff *

จะวางไฟล์ zip ชั่วคราวใน directory / tmp คัดลอกทับ stuff.zip ไปยังไดเรกทอรีปัจจุบันเมื่อเสร็จแล้ว ตัวเลือกนี้มีประโยชน์เมื่ออัปเดตไฟล์เก็บถาวรที่มีอยู่และระบบไฟล์ที่มีไฟล์เก็บถาวรเก่านี้มีพื้นที่ไม่เพียงพอที่จะเก็บทั้งไฟล์เก่าและใหม่ในเวลาเดียวกัน นอกจากนี้ยังอาจมีประโยชน์เมื่อสตรีมมิ่งในบางกรณีเพื่อหลีกเลี่ยงความต้องการตัวอธิบายข้อมูล โปรดทราบว่าการใช้ตัวเลือกนี้อาจต้องใช้เวลา zip ในการคัดลอกไฟล์เก็บถาวรเมื่อดำเนินการกับระบบไฟล์ปลายทาง

โดยค่าเริ่มต้นจะzipเก็บเส้นทางแบบเต็มที่สัมพันธ์กับไดเรกทอรีปัจจุบัน หากคุณต้องการให้ zipfile มีsqlไดเรกทอรีเป็นรูทคุณจะต้องเรียกใช้คำสั่งจาก/home/cyrusไดเรกทอรี


14

หากคุณต้องการzipเนื้อหาของไดเรกทอรีที่กำหนดและจัดเก็บzipไฟล์ในไดเรกทอรีปัจจุบันคุณสามารถเขียนมัน:

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

5

-bระบุตำแหน่งที่zipควรวางไฟล์ชั่วคราวไม่ใช่ว่าควรเปลี่ยนไดเรกทอรีที่ไหน จากman zip:

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

ลองสิ่งนี้:

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

หรือcd /home/cyrus && zip /sql.zip sqlถ้าคุณต้องการสร้างไฟล์ zip ในรูท
tripleee

2

ไม่แน่ใจว่าฉันเข้าใจถูกต้องหรือไม่ -b จะไม่เปลี่ยนโฟลเดอร์รูท มันจะใส่ไฟล์ zip ชั่วคราวในไดเร็กตอรี่ / home / cryus, คัดลอกทับ sql.zip ไปยังไดเรคทอรีปัจจุบันเมื่อเสร็จแล้ว ตัวเลือกนี้มีประโยชน์เฉพาะเมื่ออัปเดตไฟล์เก็บถาวรที่มีอยู่และระบบไฟล์ที่มีไฟล์เก็บถาวรเก่านี้มีพื้นที่ไม่เพียงพอที่จะเก็บทั้งไฟล์เก่าและใหม่ในเวลาเดียวกัน

ลองใช้:

-j จัดเก็บเพียงชื่อไฟล์ที่บันทึก (ขยะเส้นทาง) และไม่เก็บชื่อไดเรกทอรี โดยค่าเริ่มต้น zip จะเก็บเส้นทางแบบเต็ม (สัมพันธ์กับเส้นทางปัจจุบัน)


1
-jอาจไม่ถูกต้อง ฉันจะสมมติว่า OP ต้องการเก็บเส้นทางสัมพัทธ์ไม่ใช่ลบเส้นทางทั้งหมด
tripleee

2

แรงบันดาลใจจากคำตอบของ Stephane:

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

ผลลัพธ์:

  1. คุณมี sql.zip ใน / home / cyrus /
  2. sql.zip มี sql / directory และเนื้อหาทั้งหมด
  3. คุณเริ่มต้น PWD จะไม่เปลี่ยนแปลง

4
มันจะดีกว่านี้อย่างไร?
สตีเฟ่น Rauch

0

อาจเป็นการง่ายกว่าที่จะเชื่อมโยงโฟลเดอร์ที่คุณพยายามจะซิปไปยังไดเรกทอรีปัจจุบัน วิธีที่คุณสามารถอยู่ในที่ที่คุณอยู่

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

พวกเขาจัดการ symlink ถ้าคุณต้องการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.