คุณจะแตกโฟลเดอร์เดียวจากไฟล์เก็บถาวร tar.gz ขนาดใหญ่ได้อย่างไร


132

ฉันใช้คำสั่งนี้กับไฟล์เก็บถาวร5GB

tar -zxvf archive.tar.gz /folder/in/archive

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


คุณใช้เส้นทางสัมบูรณ์หรือเส้นทางสัมพัทธ์หรือไม่? ควรเป็นญาตินอกจากที่ดูดี คุณใช้งานได้นานเท่าไหร่และระบบของคุณดีแค่ไหน? จะใช้เวลาอย่างน้อยหลายนาทีในเครื่องที่รวดเร็ว อาจเป็นชั่วโมงหรือนานกว่านั้น? ฉันกำลังทำการทดสอบ
Kevin

ใช่มันเสร็จสมบูรณ์หลังจาก ~ 1 ชม. แต่เส้นทางสัมบูรณ์ผิดคุณถูกต้อง
Garrett Hall

5
บน Linux คุณสามารถดูไกลแค่ไหนในการจัดเก็บtarอยู่กับcat /proc/$(pidof tar)/fdinfo/0(ปรับตัวเข้ากับคำสั่งถ้าคุณมีมากกว่าหนึ่งtarกระบวนการทำงาน)
Gilles

ส่วนที่สำคัญยังไม่มีการเฉือนต่อท้าย การใช้folder/folder2/จะไม่ทำงาน
Marki555

คำตอบ:


145

tarร้านค้าทางญาติโดยค่าเริ่มต้น GNU tar ยังพูดเช่นนั้นถ้าคุณพยายามจัดเก็บเส้นทางที่แน่นอน:

tar -cf foo.tar /home/foo
tar: Removing leading `/' from member names

หากคุณต้องการแยกโฟลเดอร์เฉพาะดูสิ่งที่อยู่ในไฟล์ tar:

tar -tvf foo.tar

และจดชื่อไฟล์ที่แน่นอน ในกรณีที่foo.tarไฟล์ของฉันฉันสามารถแยก/home/foo/barโดยพูดว่า:

tar -xvf foo.tar home/foo/bar # Note: no leading slash

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

tar -C / -xvf foo.tar home/foo/bar # -C is the ‘change directory’ option

มีเหตุผลที่ชัดเจนว่าทำไมtarแปลงเส้นทางไปสู่เส้นทางที่สัมพันธ์กัน หนึ่งคือความสามารถในการคืนค่าการเก็บถาวรในสถานที่อื่นนอกเหนือจากต้นฉบับ อื่น ๆ คือความปลอดภัย คุณสามารถแตกไฟล์เก็บถาวรคาดว่าไฟล์จะปรากฏในไดเรกทอรีทำงานปัจจุบันของคุณและแทนที่จะเขียนทับไฟล์ระบบ (หรืองานของคุณเอง) ที่อื่นโดยไม่ได้ตั้งใจ

หมายเหตุ: หากคุณใช้-Pตัวเลือกนี้tar จะเก็บถาวรพา ธ สัมบูรณ์ ดังนั้นจึงเป็นค่าใช้จ่ายในการตรวจสอบเนื้อหาของคลังเก็บขนาดใหญ่ก่อนที่จะแยก


36
--strip-components=Nอาจมีประโยชน์สำหรับบางคนที่นี่
คิวเมนตัส

2
ในกรณีของฉันมันจำเป็นต้องเขียน./foldername/แทนfoldernameฉันเดาว่ามันเป็นเพราะเมื่อฉันสร้าง tar ฉันสร้างขึ้นด้วยtar -cvf santi.tar ./*และเมื่อฉัน "จดทะเบียน" น้ำมันดินนี่คือสิ่งที่มันพูดdrwxr-xr-x santi/santi 0 2016-04-11 09:42 ./foldername/
santiago arizti

1
เกี่ยวกับ.gzอะไร
Peter Krauss

1
@PeterKrauss เปลี่ยน-xvfเป็น-xzvf(เพิ่ม-zตัวเลือก) และเห็นได้ชัดfoo.tarถึงfoo.tar.gzหรือชื่อไฟล์เก็บถาวรของคุณ การถือครองเดียวกันสำหรับ-j(bz2) และในบางรุ่นล่าสุด-J(xz) มิฉะนั้นท่อเหมือนzcat foo.tar.gz | tar -xvf - …ยังใช้งานได้
Alexios

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