tar -C พร้อมกับรูปแบบไฟล์ไวด์การ์ด


17

ฉันสามารถใช้คำสั่ง tar เพื่อเปลี่ยนไดเรกทอรีและใช้รูปแบบไฟล์ไวด์การ์ดได้หรือไม่?

นี่คือสิ่งที่ฉันพยายามทำ:

tar -cf example.tar -C /path/to/file *.xml

ใช้งานได้หากฉันไม่เปลี่ยนไดเรกทอรี (-C) แต่ฉันพยายามหลีกเลี่ยงเส้นทางที่สมบูรณ์ในไฟล์ tar

tar -cf example.tar /path/to/file/*.xml

นี่คือความพยายามอื่น ๆ ที่ฉันได้ทำ:

tar -cf example.tar -C /path/to/file *.xml
tar -cf example.tar -C /path/to/file/ *.xml
tar -cf example.tar -C /path/to/file/ ./*.xml
tar -cf example.tar -C /path/to/file "*.xml"

และนี่คือข้อผิดพลาดที่ฉันได้รับ:

tar: *.xml: Cannot stat: No such file or directory

ฉันรู้ว่ามีวิธีอื่นในการทำให้งานนี้ (โดยใช้ find, xargs ฯลฯ ) แต่ฉันหวังว่าจะทำสิ่งนี้ด้วยคำสั่ง tar

ความคิดใด ๆ

คำตอบ:


18

ปัญหาคือ * .xml ถูกตีความโดยเชลล์ไม่ใช่โดย tar ดังนั้นไฟล์ xml ที่พบ (ถ้ามี) อยู่ในไดเร็กทอรีที่คุณรันคำสั่ง tar ใน

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

วิธีที่ง่ายที่สุดก็คือไปcdที่ไดเรกทอรีที่ไฟล์:

$ (cd /path/to/file && tar -cf /path/to/example.tar *.xml)

ควรทำงาน.

วงเล็บจัดกลุ่มคำสั่งไว้ด้วยกันดังนั้นเมื่อเสร็จแล้วคุณจะยังอยู่ในไดเรกทอรีเดิม && หมายถึงการที่tarจะทำงานหากเริ่มต้นcdสำเร็จ


9

หนึ่งในความพยายามของคุณ:

tar -cf example.tar -C /path/to/file "*.xml"

อักขระ * ถูกส่งผ่านไปยัง tar อย่างแน่นอน อย่างไรก็ตามปัญหาคือ tar นั้นรองรับการจับคู่สัญลักษณ์ในชื่อของสมาชิกที่เก็บถาวรเท่านั้น ดังนั้นในขณะที่คุณสามารถใช้อักขระตัวแทนเมื่อแยกหรือแสดงรายชื่อสมาชิกจากไฟล์เก็บถาวรคุณไม่สามารถใช้สัญลักษณ์แทนเมื่อคุณสร้างหน่วยเก็บถาวร

ในสถานการณ์เช่นนี้บ่อยครั้งที่ฉันหันไปหา (เหมือนที่คุณพูดไปแล้ว) หากคุณมี GNU พบมันมีตัวเลือกที่ดีในการพิมพ์เฉพาะเส้นทางสัมพัทธ์โดยใช้ตัวเลือก -printf:

find '/path/to/file' -maxdepth 1 -name '*.xml' -printf '%P\0' \
| tar --null -C '/path/to/file' --files-from=- -cf 'example.tar'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.