การเก็บถาวร tar ที่รับอินพุตจากรายการไฟล์


166

ฉันมีไฟล์ที่มีรายการไฟล์ที่ฉันต้องการเก็บถาวรด้วย tar ลองเรียกมันว่าmylist.txt

มันมี:

file1.txt
file2.txt
...
file10.txt

มีวิธีที่ฉันสามารถออกคำสั่ง TAR ที่ใช้mylist.txtเป็นอินพุตได้หรือไม่? สิ่งที่ต้องการ

tar -cvf allfiles.tar -[someoption?] mylist.txt

เพื่อให้คล้ายกับว่าฉันออกคำสั่งนี้:

tar -cvf allfiles.tar file1.txt file2.txt file10.txt 

4
หน้า tar man นั้นไม่ช่วยเหลืออย่างมากสำหรับตัวเลือกนี้ (อย่างน้อยใน RedHat 5.4 ถึง 6.3): "-T: รับชื่อเพื่อแยกหรือสร้างจากไฟล์ F" เสียง "แตกไฟล์หรือสร้าง" นำไปใช้กับการนำไฟล์ออกจากไฟล์เก็บถาวร tar แต่ไม่ใส่ไว้ใน-Xตัวเลือกการแยกรอดจากคำสั่ง Unix tar เก่า แต่เห็นได้ชัดว่า -I (รวม) ไม่ได้!
Ogre Psalm33

มีเพียงไม่กี่manหน้ากับEXAMPLESส่วนแม้ว่ามันจะเป็นส่วนมาตรฐาน ดู < unix.stackexchange.com/questions/306189/… >
sam boosalis

คำตอบ:


262

ใช่:

tar -cvf allfiles.tar -T mylist.txt

ฉันหวังว่าฉันสามารถใส่ความคิดเห็นใน mylist.txt .. มีวิธีแก้ไขปัญหาโดยใช้ตัวเลือก tar จากภายใน mylist.txt หรือไม่?
Stphane

7
@Stphane นั้นง่ายโดยใช้ธง --exclude อนุญาตสิ่งนี้ สมมติว่าบรรทัดความคิดเห็นของคุณเริ่มต้นด้วย '#' คำสั่งเช่นต่อไปนี้จะเพิกเฉย / แยกการดำเนินการไฟล์ใด ๆ # '-T mylist.txt Tar รายงานข้อผิดพลาด แต่เมื่อคุณตรวจสอบไฟล์เก็บถาวร tar ของคุณจะไม่มีข้อผิดพลาดและไฟล์ทั้งหมดจากรายการจะอยู่ในไฟล์เก็บถาวรของคุณ
Matt G

ชี้ให้เห็นว่าคำสั่งนี้มีไว้สำหรับชุดคำสั่ง linux และคำสั่งที่อยู่ใน sunOS หรือชุดคำสั่งอื่นให้ตรวจสอบคำตอบด้านล่าง เช่นสำหรับ sunOS สองทางเลือกที่ฉันได้ทดสอบ: tar -cvf file.tar -I list.txt และ tar -cvf file.tar $ (cat list.txt)
Nasri Najib

-L mylist.txtบน AIX
Roland

82

สมมติว่า GNU tar (เช่นนี้เป็น Linux) -Tหรือ--files-fromตัวเลือกคือสิ่งที่คุณต้องการ


3
ตัวเลือกนี้ยังมีอยู่ใน "bsdtar 3.1.2" ใน FreeBSD 10
1414

33

คุณยังสามารถไพพ์ในชื่อไฟล์ที่อาจมีประโยชน์:

find /path/to/files -name \*.txt | tar -cvf allfiles.tar -T -

2
ถ้ารายการไฟล์. txt มีขนาดใหญ่มาก ควรใช้คำสั่ง xarg กับ tar -r .. แทน tar -c .. หรือไม่
Stphane

1
@Stphane อืมฉันไม่คิดว่าความยาวของรายการมีความสำคัญกับวิธีนี้มากนัก ในความเป็นจริงฉันคิดว่าวิธีนี้ดีกว่า xargs เพราะ xargs จะเรียกใช้ tar ซ้ำแล้วซ้ำอีกเพื่อผนวกข้อมูล แต่ฉันไม่ได้ทดสอบวิธีจริง ๆ
woot

2
เมื่อใช้งานไพพ์ซึ่งเป็นกรณีนี้ระบบปฏิบัติการจะสร้างสตรีมบนทั้งสองด้านของไพพ์และซิงโครไนซ์การผลิตและการใช้ข้อมูล รายการของไฟล์อาจไม่มีที่สิ้นสุด คุณสามารถ tar / gz อินเทอร์เน็ตทั้งหมดโดยใช้ Raspberry Pi Zero เนื่องจากคุณมีพื้นที่เก็บข้อมูลเพียงพอที่ปลายท่อ
Richard Gomes

14

ตัวอย่างของ tar บางเวอร์ชันเช่นเวอร์ชันเริ่มต้นบน HP-UX (ฉันทดสอบ 11.11 และ 11.31) ไม่รวมตัวเลือกบรรทัดคำสั่งเพื่อระบุรายการไฟล์ดังนั้นการแก้ไขที่เหมาะสมคือ:

tar cvf allfiles.tar $(cat mylist.txt)

4
UUoC (ไม่จำเป็นต้องใช้cat) $(<mylist.txt)เพียงแค่
David C. Rankin

2
โปรดทราบว่านี่อาจเกินความยาวสูงสุดของบรรทัดคำสั่งหากmylist.txtมีขนาดใหญ่
Andre Holzner

ในกรณีtar -T <(<mylist.txt)นั้น ซ้ำซ้อนเช่นคำตอบนี้
Mike D

7

บน Solaris คุณสามารถใช้ตัวเลือก -I เพื่ออ่านชื่อไฟล์ที่ปกติคุณจะระบุในบรรทัดคำสั่งจากไฟล์ ตรงกันข้ามกับบรรทัดคำสั่งสิ่งนี้สามารถสร้างไฟล์เก็บถาวร tar ที่มีไฟล์หลายแสนไฟล์ (แค่ทำอย่างนั้น)

ตัวอย่างจะอ่าน

tar -cvf allfiles.tar -I mylist.txt

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