Mac OS Xでファイルの「拡張属性」を削除するにはどうすればよいですか?


260

ストレステストを実行するAppleScriptスクリプトがあります。テストの一部は、特定のファイルを開いたり、保存したり、閉じたりすることです。どういうわけか、ファイルは、ファイルの保存を禁止する「拡張属性」を取得しています。これにより、ストレステストが失敗します。

拡張属性を削除するにはどうすればよいですか?


拡張属性は、ファイルの保存を妨げることはできません。アクセス許可の問題ではなく、ACLですか?
リリーバラード

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オプションを使用して、1つの拡張属性を削除します。

$ 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にはmanページがあります


2
アップルは、オンラインで利用可能それのためのmanページがあります。developer.apple.com/documentation/Darwin/Reference/ManPages/...
クインテイラー

Mountain Lion(10.8)では-cオプションが削除されたようです。xattr -hは-cを一覧表示せず、使用時に「-cが認識されません」を生成する 拡張属性を1つずつ削除するのはとても大変です。
helioz 2013年

1
-cが機能しません(OS X 10.6.8)。-d文句は言わなかったが効果もなかった。私は次のように各拡張属性に明示的に名前を付ける必要がありました:(xattr -rd <attrname> <folder/file>再帰的に削除します)。存在する属性(ディレクトリツリー全体で同じ属性である可能性が高い)を見つけるにxattr <dir/file>は、上記の回答のように使用します。
マインドシーフ2013年

@mindtheifここでは、xCodeコマンドラインツールが必要であることをここで述べていません。10.6.8では、別の名前が付けられました。これがGitHubのビルド済みインストーラーへのリンクです。これが問題かどうかを確認するためにすべてのxCodeをインストールする必要はありません。

5
Xcodeが10.8.5システムにインストールされていると、私にxattr -cは問題なく動作します(すべてのメタデータが正常に削除されます)。
Doktor J

103

単一ファイルの単一属性の削除

バイエルンの答えを見てください。


1つのファイルのすべての拡張属性を削除するには

フラグxattrと一緒に使用して-c、属性を「クリア」します。

xattr -c yourfile.txt



多くのファイルのすべての拡張属性を削除するには

ディレクトリ内のすべてのファイルの拡張属性を再帰的に削除するには、-c「クリア」フラグを-r再帰フラグと組み合わせます。

xattr -rc /path/to/directory



Mac OS Xユーザー向けのヒント

スペースまたは特殊文字を含む長いパスがありますか?

を開いTerminal.appて入力を開始しxattr -rc、末尾にスペースを含めてから、ファイルまたはフォルダーをTerminal.appウィンドウにドラッグすると、適切なエスケープを使用してフルパスが自動的に追加されます。


1
-cOS X 10.5で失敗します:option -c not recognized。AppleのPowerPCでのテストに1つ使用します。これは、OS Xのサポートの下位レベルのバージョンのように見え-l-p-w-d
jww 2016年

@cwd:Finderへのドラッグアンドドロップドロップ. textClippingは、apple.stackexchange.com
questions /

@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

-cOS X 10.5で失敗します:option -c not recognized。AppleのPowerPCでのテストに1つ使用します。これは、OS Xのサポートの下位レベルのバージョンのように見え-l-p-w-d
jww 2016年

@jww以下の私の回答でエラーが発生する理由を説明します。stackoverflow.com/a/58616002/1896134
JayRizzo

3

回答(個別ファイル)


1.選択に使用するキーを表示します。

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.キーを再度ショーケースに入れ、キーが削除されていることを確認します。

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.選択に使用するキーを表示します。

xattr -r ~/Desktop

2.ディレクトリ内のすべてのファイルの特定のキーを削除する

xattr -rd com.apple.FinderInfo ~/Desktop

3.ディレクトリ内のすべてのファイルのすべてのキーを削除します

xattr -rc ~/Desktop

警告:これらを削除すると、元に戻すことはできません!
フォールトエラー:元に戻すことはできません。


エラー


人々が受けているエラーに対処したかった。 エラーが原因で私も不思議に思ったので... Mac xattrでPythonでインストールした場合、環境に問題がある可能性があります。

私のMacには2つの異なるパスがあります xattr

type -a xattr

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

したがって、-cxargsで機能しない例の1つは、bashではデフォルトで非Pythonバージョンが使用されるためです。

で動作します -c

/usr/bin/xattr -c

動作しません -c

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

私のシェル/ターミナルのデフォルト値には/ usr / local /ビン/ xattrの私があるため$PATH /usr/local/bin:前にある/usr/bin:どの私はデフォルトであると信じています。

これを証明できます。Pythonをアンインストールしようとすると、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. xattrあなたが持っているかもしれないPython をアンインストールしてください:pip3 uninstall xattr
  2. すべてのTerminalウィンドウを閉じて終了Terminal
  3. 新しいTerminalウィンドウを再度開きます。
  4. ReRun 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 VERSION 0.6.4のマンページ

注:現在のバージョン0.9.6のPythonヘルプページが見つかりませんでした

読んでくれてありがとう!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.