ฉันจะลบ“ คุณสมบัติเพิ่มเติม” ออกจากไฟล์ใน Mac OS X ได้อย่างไร


260

ฉันมีสคริปต์AppleScriptที่รันการทดสอบความเครียด ส่วนหนึ่งของการทดสอบคือการเปิดบันทึกและปิดไฟล์บางไฟล์ อย่างใดไฟล์ที่ได้รับ "คุณลักษณะขยาย" บางอย่างที่ห้ามไม่ให้บันทึกไฟล์ นั่นทำให้การทดสอบความเครียดล้มเหลว

ฉันจะลบแอตทริบิวต์เพิ่มเติมได้อย่างไร


แอตทริบิวต์เพิ่มเติมไม่สามารถป้องกันไฟล์จากการบันทึก คุณแน่ใจหรือว่าไม่ใช่ปัญหาการอนุญาตหรือ ACL
Lily Ballard

คุณเพิ่งอัพเกรดเป็น 10.7.3 หรือไม่ ดูเหมือนว่ามีข้อผิดพลาดที่แอพ GUI จำนวนมาก (รวมถึง TextEdit แต่รวมถึงแอพอื่น ๆ - รวมถึงแอพที่ฉันเขียนด้วยตัวเองซึ่งไม่ได้ทำอะไรแปลก ๆ ) ตอนนี้จะตั้งบิตกักกันไว้ในไฟล์ ตามที่ @Bavarious กล่าวไว้คุณสามารถลบออกได้โดยใช้ @ xattr @ ดูที่ TextWrangler ซึ่งเป็นอิสระและฉันคิดว่ามีการสนับสนุน AppleScript ที่ดี ฉันบอกว่าไม่ได้ตั้งค่าบิตกักกัน
Abhi Beckert

6
หากด้านล่างใช้งานได้คุณควรยอมรับคำตอบ - ช่วยทำให้เว็บไซต์นี้เป็นฐานความรู้ที่ดี :-)
Graza

คำตอบ:


392

ใช้xattrคำสั่ง คุณสามารถตรวจสอบคุณสมบัติเพิ่มเติม:

$ xattr s.7z
com.apple.metadata:kMDItemWhereFroms
com.apple.quarantine

และใช้-dตัวเลือกเพื่อลบหนึ่งแอตทริบิวต์เพิ่มเติม:

$ xattr -d com.apple.quarantine s.7z
$ xattr s.7z
com.apple.metadata:kMDItemWhereFroms

คุณยังสามารถใช้-cตัวเลือกเพื่อลบแอตทริบิวต์เพิ่มเติมทั้งหมด:

$ xattr -c s.7z
$ xattr s.7z

xattr -hจะแสดงให้คุณเลือกบรรทัดคำสั่งและxattr มีหน้าคน


2
Apple มี man page ให้พร้อมใช้งานออนไลน์: developer.apple.com/documentation/Darwin/Reference/ManPages/…
Quinn Taylor

ปรากฏว่ามีการลบตัวเลือก -c ใน Mountain Lion (10.8) xattr -h ไม่มีรายการ -c และสร้าง "-c ไม่รู้จัก" อีกต่อไปเมื่อใช้ เจ็บปวดมากในขณะนี้เพื่อลบคุณลักษณะขยายหนึ่งโดยหนึ่ง
helioz

1
-cไม่ทำงานสำหรับฉัน (OS X 10.6.8) -dยังไม่มีผลใด ๆ แม้ว่ามันจะไม่บ่น ฉันต้องตั้งชื่อแอตทริบิวต์แบบขยายแต่ละรายการอย่างชัดเจนเช่น: xattr -rd <attrname> <folder/file>(ลบแบบเรียกซ้ำ) เพื่อหาคุณลักษณะที่มีอยู่ (น่าจะเป็นคุณลักษณะเดียวกันในต้นไม้ไดเรกทอรีทั้งหมด) ใช้xattr <dir/file>ในคำตอบข้างต้น
mindthief

@mindtheif ไม่มีใครพูดถึงที่นี่ว่าต้องใช้เครื่องมือบรรทัดคำสั่ง xCode ใน 10.6.8 มันเรียกว่าบางสิ่งที่แตกต่าง นี่คือลิงก์ไปยังโปรแกรมติดตั้งที่สร้างไว้ล่วงหน้าบน GitHub ดังนั้นคุณไม่ต้องติดตั้ง xCode ทั้งหมดเพื่อดูว่านี่เป็นปัญหาของคุณหรือไม่

5
เมื่อติดตั้ง Xcode ในระบบ 10.8.5 ของฉันก็ใช้xattr -cงานได้ดีสำหรับฉัน (และปล้นเมทาดาทาทั้งหมดได้สำเร็จ)
Doktor J

103

การลบแอตทริบิวต์เดียวบนไฟล์เดียว

ดูคำตอบของ Bavarious


ในการลบคุณสมบัติที่ขยายทั้งหมดในไฟล์เดียว

ใช้xattrกับ-cแฟล็กเพื่อ "ล้าง" แอ็ตทริบิวต์:

xattr -c yourfile.txt



ในการลบแอททริบิวต์แบบขยายทั้งหมดในหลายไฟล์

ในการลบแอตทริบิวต์เพิ่มเติมซ้ำ ๆ ในไฟล์ทั้งหมดในไดเรกทอรีให้รวม-cแฟล็ก "clear" กับ-rแฟล็ก recursive:

xattr -rc /path/to/directory



คำแนะนำสำหรับผู้ใช้ Mac OS X

มีเส้นทางยาวที่มีช่องว่างหรืออักขระพิเศษหรือไม่

เปิดTerminal.appและเริ่มพิมพ์xattr -rcรวมถึงช่องว่างต่อท้ายจากนั้นลากไฟล์หรือโฟลเดอร์ไปที่Terminal.appหน้าต่างและมันจะเพิ่มเส้นทางแบบเต็มโดยอัตโนมัติด้วยการหลบหนีที่เหมาะสม


1
-cล้มเหลวใน OS X option -c not recognized10.5: เราใช้ตัวทดสอบสำหรับ PowerPC ของ Apple ดูเหมือนว่ารุ่น downlevel ของ OS X สนับสนุน-l, -p, และ-w -d
jww

@cwd: ตัวค้นหาลากแล้วปล่อยลงในเทอร์มินัลไม่ทำงานกับไฟล์ตัวค้นหา 'พิเศษ' อย่าง. textClippingที่อธิบายไว้ในapple.stackexchange.com/questions/301871/ …
ccpizza

@ jww ฉันอธิบายว่าทำไมคุณได้รับข้อผิดพลาดในคำตอบของฉันด้านล่าง stackoverflow.com/a/58616002/1896134
JayRizzo

23

ลองใช้:

xattr -rd com.apple.quarantine directoryname

วิธีนี้จะช่วยให้ลบแอตทริบิวต์ที่น่ารำคาญซ้ำ ๆ ได้ทุกที่


7

อีกวิธีเรียกซ้ำ:

# change directory to target folder:
cd /Volumes/path/to/folder

# find all things of type "f" (file), 
# then pipe "|" each result as an argument (xargs -0) 
# to the "xattr -c" command:
find . -type f -print0 | xargs -0 xattr -c

# Sometimes you may have to use a star * instead of the dot.
# The dot just means "here" (whereever your cd'd to
find * -type f -print0 | xargs -0 xattr -c

-cล้มเหลวใน OS X option -c not recognized10.5: เราใช้ตัวทดสอบสำหรับ PowerPC ของ Apple ดูเหมือนว่ารุ่น downlevel ของ OS X สนับสนุน-l, -p, และ-w -d
jww

@ jww ฉันอธิบายว่าทำไมคุณได้รับข้อผิดพลาดในคำตอบของฉันด้านล่าง stackoverflow.com/a/58616002/1896134
JayRizzo

3

คำตอบ (ไฟล์ส่วนบุคคล)


1. ปุ่ม Showcase เพื่อใช้ในการเลือก

xattr ~/Desktop/screenshot\ 2019-10-23\ at\ 010212.png
    # com.apple.FinderInfo
    # com.apple.lastuseddate#PS
    # com.apple.metadata:kMDItemIsScreenCapture
    # com.apple.metadata:kMDItemScreenCaptureGlobalRect
    # com.apple.metadata:kMDItemScreenCaptureType

2. เลือกรหัสเพื่อลบ

xattr -d com.apple.lastuseddate#PS ~/Desktop/screenshot\ 2019-10-23\ at\ 010212.png
xattr -d kMDItemIsScreenCapture ~/Desktop/screenshot\ 2019-10-23\ at\ 010212.png

3. คีย์ Showcase อีกครั้งเพื่อดูว่าพวกมันถูกลบไปแล้ว

xattr -l ~/Desktop/screenshot\ 2019-10-23\ at\ 010212.png
    # com.apple.FinderInfo
    # com.apple.metadata:kMDItemScreenCaptureGlobalRect
    # com.apple.metadata:kMDItemScreenCaptureType

4. สุดท้ายลบปุ่มทั้งหมดสำหรับไฟล์เฉพาะ

xattr -c ~/Desktop/screenshot\ 2019-10-23\ at\ 010212.png

คำตอบ (ไฟล์ทั้งหมดในไดเรกทอรี)


1. ปุ่ม Showcase เพื่อใช้ในการเลือก

xattr -r ~/Desktop

2. ลบคีย์เฉพาะสำหรับทุกไฟล์ในไดเรกทอรี

xattr -rd com.apple.FinderInfo ~/Desktop

3. ลบคีย์ทั้งหมดบนทุกไฟล์ในไดเรกทอรี

xattr -rc ~/Desktop

คำเตือน: เมื่อคุณลบสิ่งเหล่านี้คุณจะไม่ได้รับกลับมา!
ข้อผิดพลาดที่ผิดพลาด: ไม่มีการเลิกทำ


ข้อผิดพลาด


ฉันต้องการแก้ไขข้อผิดพลาดของผู้คนที่ได้รับ เนื่องจากข้อผิดพลาดทำให้ฉันถั่วเกินไป ... บน mac ถ้าคุณติดตั้งxattrในหลามแล้วสภาพแวดล้อมของคุณอาจมีปัญหา

มีสองเส้นทางที่แตกต่างกันสำหรับ mac ของฉัน xattr

type -a xattr

    # xattr is /usr/local/bin/xattr    # PYTHON Installed Version
    # xattr is /usr/bin/xattr          # Mac OSX Installed Version

ดังนั้นหนึ่งในตัวอย่างที่-cจะไม่ทำงานใน xargs เป็นเพราะในทุบตีคุณเริ่มต้นรุ่นที่ไม่ใช่หลาม

ใช้ได้กับ -c

/usr/bin/xattr -c

ใช้งานไม่ได้ -c

/usr/local/bin/xattr -c
    # option -c not recognized

เชลล์ / เทอร์มินัลของฉันมีค่าเริ่มต้นเป็น / usr / local / bin / xattr เพราะฉัน $PATH /usr/local/bin:มาก่อน/usr/bin:ซึ่งฉันเชื่อว่าเป็นค่าเริ่มต้น

ฉันสามารถพิสูจน์ได้เพราะถ้าคุณพยายามถอนการติดตั้งงูหลาม xattrคุณจะเห็น:

pip3 uninstall xattr
Uninstalling xattr-0.9.6:
  Would remove:
    /usr/local/bin/xattr
    /usr/local/lib/python3.7/site-packages/xattr-0.9.6.dist-info/*
    /usr/local/lib/python3.7/site-packages/xattr/*
Proceed (y/n)?

วิธีการแก้ปัญหา


เพื่อแก้ไข option -c not recognizedข้อผิดพลาด

  1. ถอนการติดตั้ง Python ใด ๆ xattrคุณอาจมี:pip3 uninstall xattr
  2. ปิดทั้งหมด Terminalหน้าต่าง & ออกTerminal
  3. เปิดTerminalหน้าต่างใหม่อีกครั้ง
  4. วิ่งใหม่ xattrคำสั่งเรียกใช้อีกครั้งและควรทำงาน

หรือ

ถ้าคุณต้องการเก็บ Python ไว้ให้xattrใช้

/usr/bin/xattr

สำหรับShellคำสั่งใด ๆTerminal


ตัวอย่าง:


เวอร์ชั่นของ Python xattrไม่สามารถจัดการรูปภาพได้เลย:

Good-Mac:~ JayRizzo$ xattr ~/Desktop/screenshot\ 2019-10-23\ at\ 010212.png
    # com.apple.FinderInfo
    # Traceback (most recent call last):
    #   File "/usr/local/bin/xattr", line 8, in <module>
    #     sys.exit(main())
    #   File "/usr/local/lib/python3.7/site-packages/xattr/tool.py", line 196, in main
    #     attr_value = attr_value.decode('utf-8')
    # UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb0 in position 2: invalid start byte

Good-Mac:~ JayRizzo$ /usr/bin/xattr ~/Desktop/screenshot\ 2019-10-23\ at\ 010212.png
    # com.apple.FinderInfo
    # com.apple.lastuseddate#PS
    # com.apple.metadata:kMDItemIsScreenCapture
    # com.apple.metadata:kMDItemScreenCaptureGlobalRect
    # com.apple.metadata:kMDItemScreenCaptureType

หน้าผู้ชาย

หน้าคนสำหรับ OSX xattr

หน้าคนสำหรับ Python xattr รุ่น 0.6.4

หมายเหตุ: ฉันไม่พบหน้าวิธีใช้ python สำหรับ VERSION 0.9.6 ปัจจุบัน

ขอบคุณที่อ่าน!

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