รับ mac tar เพื่อหยุดการใส่. _ * ชื่อไฟล์ในไฟล์เก็บถาวร tar [ไฟล์ซ้ำ]


46

ซ้ำเป็นไปได้:
เหตุใดฉันจึงได้รับไฟล์เช่น. _foo ใน tarball ของฉันบน OS X

ฉันสร้างสคริปต์ autoconf บน Mac เมื่อ tar รันจะทำให้ชื่อ. foobarเหล่านี้ทั้งหมดในไฟล์เก็บถาวร:

libewf-20110312/borlandc/builder5/ewfacquire/._ewfacquire.bpf
libewf-20110312/borlandc/builder5/ewfacquire/ewfacquire.bpf
libewf-20110312/borlandc/builder5/ewfacquire/._ewfacquire.bpr
libewf-20110312/borlandc/builder5/ewfacquire/ewfacquire.bpr

ตอนนี้สิ่งที่เกิดขึ้นคือระบบไฟล์ HFS ของ Apple กำลังวางคุณสมบัติไฟล์ในชื่อ. _ foobarเพื่อให้สามารถเรียกคืนบนระบบ Mac อื่นได้ แต่ฉันไม่ต้องการพวกเขาพวกเขาเป็นเพียงขยะสำหรับฉัน มีวิธีใดที่จะระงับพวกเขา


ซ้ำของunix.stackexchange.com/questions/9665/...
geekosaur

2
@geekosaur ผู้ใช้บน unix.SE เลิกและยอมรับคำตอบที่ผิด
Daniel Beck

นอกจากนี้ยังมีคำถามที่เกี่ยวข้องกับคำถาม SU เกี่ยวกับการแตกไฟล์จากคลังเก็บอย่างถูกต้อง._*(เช่น.__init__.py)ซึ่งใช้โซลูชันเดียวกัน
Chris Johnsen

คำตอบ:


69

ตามคำตอบของคำถามอื่นคุณสามารถตั้งค่าตัวแปรสภาพแวดล้อมที่ไม่มีเอกสาร (?) COPYFILE_DISABLE เพื่อป้องกันไม่ให้โปรแกรมที่ระบบจัดหา (รวมถึงtar ) หลายโปรแกรมให้ความหมายพิเศษแก่._*สมาชิกที่เก็บถาวร โดยเฉพาะอย่างยิ่งมันจะป้องกันพวกเขาจาก:

  • การจัดเก็บข้อมูลแอททริบิวต์แบบขยาย (รวมถึงส้อมทรัพยากร) ใน._*สมาชิกไฟล์เก็บถาวร
    (เช่นอย่าเก็บถาวร "มลพิษ" ที่สร้างขึ้นบน Mac OS X แต่มีไว้สำหรับใช้กับระบบอื่น) และ

  • พยายามที่จะดึงคุณสมบัติเพิ่มเติมหรือทรัพยากรจากสมาชิกที่เก็บถาวรชื่อเช่น._*
    (เช่นอย่าตีความ._*สมาชิกที่เก็บถาวรในที่เก็บจากระบบอื่น ๆ )

ค่าที่คุณใช้สำหรับตัวแปรสภาพแวดล้อมนั้นไม่สำคัญ (อาจเป็นสตริงว่างได้) ค่าชอบ0และfalseจะไม่เปิดใช้งานคุณลักษณะอีกครั้ง สิ่งเดียวที่สำคัญคือการตั้งค่าตัวแปร (คุณต้อง "ยกเลิกการตั้งค่า" เพื่อเปิดใช้งานคุณลักษณะอีกครั้ง)

คุณสามารถใช้ตัวแปรนี้กับแต่ละคำสั่งโดยใช้ประโยชน์จากความสามารถของเชลล์สไตล์ Bourne ( sh , ksh , bash , zsh , ฯลฯ ) เพื่อคำสั่ง prefix ด้วยตัวแปรสภาพแวดล้อมพิเศษ

COPYFILE_DISABLE=1 tar cf new.tar …

หากคุณพบปัญหามากกว่าบ่อยครั้งคุณอาจต้องการตั้งค่าและส่งออกตัวแปรนี้ในไฟล์เริ่มต้นเชลล์ตัวใดตัวหนึ่งของคุณ

# turn off special handling of ._* files in tar, etc.
COPYFILE_DISABLE=1; export COPYFILE_DISABLE

เมื่อคุณต้องการคุณสามารถยกเลิกการตั้งค่าตัวแปรสำหรับแต่ละคำสั่ง

(unset COPYFILE_DISABLE; tar cf somefile.tar …)

ในระบบ Mac OS X 10.6 คำสั่งต่อไปนี้ดูเหมือนจะรู้เกี่ยวกับ COPYFILE_DISABLE:

  • /usr/bin/tar(ลิงก์สัญลักษณ์ไปที่bsdtar)
  • /usr/bin/bsdtar
  • /usr/bin/gnutar
  • /bin/pax

COPYFILE_DISABLE เกิดขึ้นใน Mac OS X 10.5 หากคุณต้องการสนับสนุน 10.4 ก็มี COPY_EXTENDED_ATTRIBUTES_DISABLE ที่ทำงานในลักษณะเดียวกัน


ว้าว. สิ่งที่ฉันกำลังมองหา ขอบคุณ ไฟล์ autoconf ของฉันจะสะอาดกว่ามาก
vy32

0

ไม่ใช่ผู้เชี่ยวชาญ แต่ googling เล็กน้อยพบสิ่งนี้: http://www.ofzenandcomputing.com/zanswers/3422

และนี่คือ: http://hintsforums.macworld.com/archive/index.php/t-28703.html

คำสั่งที่สองดูเหมือนว่าอาจรวมอยู่ในสคริปต์ ... คุณอาจไม่สามารถป้องกันการสร้างไฟล์ fork fork แต่คุณสามารถลบออกได้โดยอัตโนมัติในภายหลัง

แก้ไข: ฉันควรได้กล่าวถึงนี้อาจมีผลลัพธ์ไม่ดีใช้ความเสี่ยงของคุณเอง


1
สคริปต์จะลบส้อมทรัพยากรออกจากไฟล์บนดิสก์ภายในเครื่อง พวกเขามักจะให้บริการวัตถุประสงค์ (เช่นการเปลี่ยนแปลงแอปพลิเคชันที่เกี่ยวข้องของไฟล์บางอย่าง) ดังนั้นสิ่งนี้ควรมาพร้อมกับคำเตือนครั้งใหญ่
Daniel Beck

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

(bah, timeouts) ที่จริงแล้วคุณสามารถทำได้หากใช้tarกับ BSD- libarchivebased (ซึ่งรวมถึง Mac OS X) แต่อาจไม่น่าเชื่อถือ การติดตั้ง GNU tar มักเป็นความคิดที่ดี (อย่างไรก็ตามมันเจ็บปวดฉันคิดว่าคุณต้องแสดงรายการทั้งหมดแล้วส่งชื่อเหล่านั้นในบรรทัดคำสั่ง) นอกจากนี้ทรัพยากร forks ทางเทคนิคอยู่บนดิสก์ แต่ใน HFS + พวกเขาจะถูกเก็บไว้ในคุณสมบัติเพิ่มเติม; ._ไฟล์เป็นวิธีที่ OS X ของการจัดเก็บทรัพยากรส้อมในสถานที่ที่ไม่สนับสนุนคุณสมบัติการขยาย
geekosaur

0

คุณสามารถลองรวบรวมของคุณเองtarหรือติดตั้งจาก Macports หรือ Fink ถ้ามี (Homebrew ไม่มี) ด้วย "โชค" บางอย่างควรรู้เมตาดาต้า OS X และข้ามการสร้างไฟล์เหล่านั้น


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