ลิงก์สัญลักษณ์และ 7zip


18

ฉันกำลังพยายามบีบอัดโฟลเดอร์ลงในไฟล์เก็บถาวร. 7z โฟลเดอร์นี้มีลิงก์สัญลักษณ์ไปยังสิ่งอื่นนอกโฟลเดอร์ (ทั้งไดเรกทอรีและไฟล์)

เห็นได้ชัดว่า 7zip เพิ่งเก็บลิงค์ตัวเองซึ่งไม่ใช่สิ่งที่ฉันตั้งใจ มีวิธีบอก 7zip หรือไม่ว่าฉันต้องการให้มันเก็บสิ่งที่มันลิงก์ไปไม่ใช่ลิงก์เอง (นั่นคือถ้ามีชื่อ symlink fooซึ่งชี้ไปที่C:\stuff\fooฉันต้องการให้รวมC:\stuff\fooไดเรกทอรีในไฟล์เก็บถาวรแทน foo ไม่ใช่ symlink แบบ 0 ไบต์))

มีวิธีแก้ปัญหาที่เหมาะสมนอกเหนือจากการเพิ่มไฟล์และโฟลเดอร์ที่เป็นปัญหาหรือไม่? มีไฟล์ประมาณ 10,000 ไฟล์ที่อ้างอิงผ่าน symlink ดังนั้นการเพิ่มไฟล์ทั้งหมดนั้นอาจใช้เวลาหลายชั่วโมง ... อาจจะมีโปรแกรมที่สร้างโฟลเดอร์ staging พร้อมไฟล์จริงในนั้นและส่งต่อไปยัง 7zip หรือเพียงแค่ผู้จัดเก็บที่จัดการ symlink ได้ดีกว่า

ฉันใช้ Windows Vista ลิงก์ทั้งหมดเป็นลิงค์สัญลักษณ์ (เช่นสร้างด้วยmklink link targetและmklink /D link target)

แก้ไข:

dir เอาต์พุตคำสั่งสำหรับไดเร็กทอรีทดสอบที่เล็กกว่า:

C:\...>dir
 Volume in drive C is OS
 Volume Serial Number is 0A3D-CD6E

 Directory of C:\...

09/04/2010  18:12    <DIR>          .
09/04/2010  18:12    <DIR>          ..
09/04/2010  18:10               975 real file.txt
09/04/2010  18:11    <SYMLINK>      test file.txt [..\test file.txt]
               2 File(s)            975 bytes
               4 Dir(s)   5,214,355,456 bytes free

การสร้างไฟล์เก็บถาวร 7z ซึ่งรวมผลลัพธ์ 7zip real file.txtไว้ แต่test file.txtถูกเพิ่มเป็นไฟล์ 0 ไบต์แม้ว่าไฟล์ที่ลิงก์จะมีอยู่และเป็น 50KB


คุณใช้ระบบปฏิบัติการใดอยู่
Charles Gargent

2
ไม่ว่า "หน้าต่าง" แท็กแนะนำว่าการใช้ im ดีหน้าต่าง ...
ไฟ Lancer

1
ตกลงคุณใช้ Windows รุ่นใดอยู่
Charles Gargent

@Fire Lancer: โดยทั่วไปคุณควรทำซ้ำข้อมูลใด ๆ จากแท็กในข้อความ อ่านง่ายขึ้นและไม่ใช่ทุกคนที่ดูเขาติดแท็ก (เนื่องจากอยู่ด้านล่าง) นอกจากนี้แท็กยังมีแนวโน้มที่จะเกิดความเข้าใจผิด เช่นฉันอาจใช้ Linux แต่ต้องการทำงานร่วมกับ Windows ดังนั้นฉันจึงติดแท็กคำถาม "windows"
sleske

1
มันจะปรากฏว่า 7z เก็บถาวรไดเรกทอรี <SYMLINKD> และ <JUNCTION> แต่ไม่ใช่ไฟล์ <SYMLINK> ดังนั้นฉันเดาว่าคุณสามารถแอบดูไฟล์ทั้งหมดของคุณลงในไดเรกทอรีและ symlink ว่ามันจะทำงานได้ดี
hova

คำตอบ:


13

เห็นได้ชัดว่า 7zip เพิ่งเก็บลิงค์ของมันเองซึ่งไม่ใช่สิ่งที่ฉันตั้งใจ มีวิธีบอก 7zip หรือไม่ว่าฉันต้องการให้มันเก็บสิ่งที่มันลิงก์ด้วยเช่นกันไม่ใช่ลิงก์ด้วยตนเอง

ไม่เห็นได้ชัดว่าไม่ (น่าเสียดาย) จริงๆแล้วมีรายงานข้อผิดพลาดใน 7zip ที่ขอสิ่งนี้: http://sourceforge.net/tracker/?func=detail&aid=2846755&group_id=14481&atid=114481 แต่มันถูกเปิดในเดือนสิงหาคม 2009 และไม่ได้สัมผัสตั้งแต่: - /

ความล้มเหลวนั้นมีเหตุผลเหมาะสมหรือไม่นอกจากการเพิ่มไฟล์และโฟลเดอร์ที่เป็นปัญหา การรวมไฟล์ผ่าน symlink มีไฟล์มากกว่า 10,000 ไฟล์ส่วนใหญ่เป็นไฟล์ symlink ดังนั้นการเพิ่มไฟล์ทั้งหมดจะใช้เวลาหลายชั่วโมง ...

ดีถ้าคุณมีพื้นที่เพียงพอ (และเวลา) คุณสามารถทำสำเนาของโฟลเดอร์แทนที่ symlink ด้วยเป้าหมายของพวกเขา คุณสามารถเช่นการใช้Robocopyและสวิทช์ของมัน/sl:

/ sl คัดลอกลิงก์สัญลักษณ์แทนเป้าหมาย


หมายเหตุ: เพียงเพื่อหลีกเลี่ยงความสับสนทราบว่า Linux สร้างp7zip (พอร์ตของ 7zip) นอกจากนี้ยังมีไบนารี7zที่ไม่สนับสนุนการเก็บไฟล์จุดเชื่อมโยงสัญลักษณ์ที่จะ (สวิทช์-l) อย่างไรก็ตาม 7zip บน Windows ไม่มีสวิตช์นี้


เนื่องจากนี่เป็นคำตอบที่ได้รับการอนุมัติต้องการชี้ให้เห็นว่า 7zip ที่แท้จริงทำโดย-lswitcher zip และ gzip ทำเช่นเดียวกันกับคำสั่งเฉพาะ
m3nda

@ erm3nda คุณเห็นสวิตช์นี้อยู่ที่ไหน กรุณาให้ข้อมูลอ้างอิง
ทำเครื่องหมาย

linux.die.net/man/1/7zมีตัวเลือก l และยังมีสวิตช์ที่มีตัวอักษรเดียวกัน ฉันทราบว่าตัวเลือกนี้ไม่มีอยู่ในซอฟต์แวร์เวอร์ชั่น Windows
m3nda

@ erm3nda: ใช่ แต่นั่นคือ p7zip พอร์ต 7zip ขอบคุณสำหรับการชี้ให้เห็น; ฉันปรับปรุงคำตอบของฉัน
sleske

ขอบคุณเช่นกัน. ไม่อยากเชื่อเลยว่า Windows ขาดคุณสมบัตินี้ไป แม้ว่า symlink บน Windows จะค่อนข้างแตกต่างกัน แต่อย่าเข้าใจว่าทำไมมันถึงทำงานได้ยาก
m3nda

-1

หากคุณใช้ Vista ขึ้นไปให้ลบ symlink และแทนที่ด้วย mklinks

mklink /D Directory FullPathToRealDirectory

โปรดทราบว่า mklink ค่อนข้างทรงพลังและสามารถรวมลิงก์ไปยังเครือข่ายแชร์และอื่น ๆ ที่คล้ายคลึงกัน

เนื่องจากดูเหมือนจะมีความสับสนเกี่ยวกับเรื่องนี้อนุญาตให้ฉันชี้แจง ฉันสมมติ OP ที่เป็นจริงพูดคุยเกี่ยวกับ Junctions เป็นแสดงที่นี่http://en.wikipedia.org/wiki/NTFS_junction_point mklink ไม่ได้ทำให้ทางแยก มันทำให้ลิงก์สัญลักษณ์ของ TRUE และฉันลองด้วยตัวเองและ 7zip ก็เคารพพวกเขาอย่างสมบูรณ์แบบ นอกจากนี้คุณจะต้องเป็นผู้ดูแลระบบเพื่อสร้างลิงก์สัญลักษณ์ mklink

 Directory of C:\temp\t

04/08/2010  04:50 PM    <DIR>          .
04/08/2010  04:50 PM    <DIR>          ..
04/08/2010  04:31 PM    <SYMLINKD>     GB [c:\users\testuser]    <-- created by mklink
04/08/2010  04:50 PM    <JUNCTION>     GB2 [\??\c:\users\testuser] <-- created by junction
04/08/2010  04:29 PM                 8 test.txt

7zip จะเก็บถาวร GB แต่จะไม่เก็บถาวร GB2 แก้ไข: จริง ๆ แล้วการทดสอบเพิ่มเติมแสดงว่า 7zip WILL เก็บถาวรไดเรกทอรีทั้งสองโดยใช้รุ่น 4.65 ดังนั้นฉันจึงไม่รู้ว่าปัญหาคืออะไร


1
เมื่อพิจารณาจากต้นกำเนิด symlink ทั้งหมดที่ทำกับ Microsoft API และ mklik ในตอนแรกสิ่งนี้จะแก้ปัญหานอกเหนือจากการสร้างสิ่งเดียวกันได้อย่างไร
Lancer ไฟ

2
-1 วิธีนี้แก้ปัญหาได้อย่างไร คุณเพียงแค่อธิบายวิธีสร้างลิงก์สัญลักษณ์
sleske

@hova: ใช่นั่นเป็นความจริงทั้งหมด (แม้ว่า MS มักจะเรียกลิงก์สัญลักษณ์ "ลิงก์สัญลักษณ์" เท่านั้น; junctions ไม่เคยถูกอ้างถึงว่าเป็น "ลิงก์สัญลักษณ์") แต่สิ่งนี้เกี่ยวข้องกับคำถามได้อย่างไร
sleske

7zip เก็บถาวรไดเรกทอรี SYMLINKD (mklink)!
hova

1
ฉันเพิ่งทำการทดสอบกับ 7zip v15.14 (64 บิต) บน Windows 7 และดูเหมือนว่า 7zip ตอนนี้ติดตาม symlinks ไดเรกทอรี แต่เก็บไฟล์เปล่าสำหรับ symlink ไฟล์ - ซึ่งไม่มีประโยชน์มาก
Bigue Nique
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.