「Finderで付けた複数カラー・タグ」を「Terminalコマンドで如何に処理」すればよいか?

近くのトピックに触発されて、Finderの動作をエミュレートするスクリプトを作成中です。


手始めに「Finderの表示モード;Date Modified ^」をyyyy-mm-dd-HH:MMで表示するスクリプトを作って見ました。


結果、Finderよりも視認性が良くて良いです。出来てみると「Finderで付けたカラー・タグ」を付けたくなり、探してみましたがファイルに一色のタグの場合は読めるものの、複数タグの場合は、最後に付けたタグしか読めません。


テスト用に作ったフォルダ中の「Finderのキャプチュア」を下図に示します。



上記フォルダ中で、実施したコマンドは;

「xattr -p -x com.apple.FinderInfo *」

その出力を図2に示します;


以上、宜しくお願いします。

Mac mini, macOS 10.14

投稿日 2019/05/31 09:42

返信
スレッドに付いたマーク ランキングトップの返信

投稿日 2019/06/01 20:28

タグの取得だけで良いなら、最初のコメントに書いたように mdls や xattr でできますよ。これなら簡単なシェルスクリプトでいけるはず。


あと、タグの設定については、


xattr -p com.apple.metadata:_kMDItemUserTags "file" | xxd -r -p | plutil -convert xml1 -o - -- -


↑これと逆のことをやれば xattr でできます。


#!/bin/bash

#
# usage: bash me.sh file1 file2 ...
#

tags='["01\n7","02\n6"]'

[[ $# > 0 ]] || { echo "usage: bash $0 file1 file2 ..." >&2; exit 1; }

for f in "$@"; do
    tags_value=$(echo "$tags" | plutil -convert binary1 -o - -- - | xxd -p)    
    xattr -wx com.apple.metadata:_kMDItemUserTags "$tags_value" "$f"
done


ただし、この場合は Finder や setResourceValue:forKey:error: メソッドとは異なり、設定されるのは「タグのみ」となります。


tags='["01\n7","02\n6"]' のところは '["タグ名\nラベルインデックス"]' または '["タグ名"]' みたいな感じで、JSON の配列で指定してください。


返信: 59

2019/06/01 21:54 T22T への返信

T22Tさん、


私は、AppleScript恐怖症患者ですが、とても個性的なさいとですね。


興味が湧いたのは2つです;


  1. Note that scripts using Myriad Tables Lib cannot be edited in Script Editor in Mojave because of new security settings. You need to use Script Debugger.
  2. Swiftについての解説(今現在見失いました)


スクリプトによるタブ設定が落ち着いたら詳しく拝見します。

情報ありがとうございました。

2019/06/01 23:12 Hiro__S への返信

Hiro.Sさん、


> 当方 (High Sierra 10.13.6) ではできてます。


🤬 ギョギョギョ、なんと言うことでしょうか!


現在のMojaveだけでなく、現在故障中の「Mac mini(Mid 2011, Sierra」でも同色タグを重複すると、タグのリセットになったと思います。


例えば「defaults」コマンドなどで設定を変えられてはないでしょうか?


Mojaveでも「同色タグを重複が可能」ならば、僕の不満の要が解消されます。検索に励みます。



> JXA が手に負えないようなら、このシェルスクリプトを試してみてはどうでしょうか?


「この」をクリックしましたが、それらしいものは在りませんでした。


むしろ「JXA が手に負えない」というよりも「Script Editor」に違和感が強いと思います。今回も、2例のJXAは動いています。


2019/06/02 08:05 mNeji への返信

あまりちゃんと調べてませんが、タグ名はこんな感じのルールになってるようです。

・大文字/小文字を区別しない

・ひらがな/カタカナを区別しない

・NFKC か NFKD で Unicode 正規化


おそらく、「NFKC Casefold + ひらがな/カタカナを区別しない」だと思います。


「RED」と「red」が同一視される

「アップル」と「あっぷる」が同一視される

「丸数字の1: U+2460」と「1」が同一視される


これ、どこかで見たことあると思ったら、AppleScript の文字列比較と同じですね...。タグ名とかならこれもアリでしょうが、こんなことをしてるからまともな比較ができないんですね。



これはいいことを知りました。感謝です!


2019/06/03 03:41 hohokihai への返信

hohokihaiさん、


返答が遅れて、御免なさい。昨日の無理が祟ったようです。


FinderのTagsにRedのエイリアスを複数追加したらFinderが不機嫌になったようで、慌てて対処して、ほっとしたところで、Mailを開けたところでした。これについてはHiro.Sさん宛の報告を準備中です。


「!=」は了解です。フォントも見やすいので、ひと段落がついたら導入します。


「==」タイプは後ほどトライします。


bashの実例までありがとうございました。



中間報告まで。

2019/06/03 04:10 Hiro__S への返信

Hiro.Sさん、


先日教えていただいた「 JXA スクリプト」、下記のようにエイリアスを作り、順調にテストできていました;

tget='osascript -l JavaScript ~/myJS/getTags'

tset='osascript -l JavaScript ~/myJS/setTags'



そこで、Finderでの「Preferebce」-->「Tags」で「Red」のエイリアス「赤」「R1」「R2」を作ってテストしている内に、Finderが不良になりました。2つの図で説明します;


図1

図2


こうなってしまうと、OSの上書きか、TimeMachineの巻戻しか?よく寝てから明日に判断します。


中間報告まで。

2019/06/03 05:26 Hiro__S への返信

Hiro.S さんによる書き込み:
取得と設定を2000回繰り返しましたが、当方では問題ありませんでした。

東方でも後ほど確認します。


tset ttt green
ちょっと確認ですが、引数の ttt はフォルダ名として、green は何ですか?フォルダ名?タグ名?それと、Finder から手動でタグを設定することはできますか?


あ、間違っていますか。自分としては「ディレクトリ名ttt」のタグをGreenの設定にするつもりでした。mata


またタグの英字表現は大文字・小文字の区別がないとのことから、簡便に小文字をもちいました。


もう一度、スレッドを確認して見ます。


Finderからの手動設定はできます。でも同一色の設定はダメです。

2019/06/06 00:40 Hiro__S への返信

Hiro.Sさん、


> あらら、Firefox だと「コード」が正しくコピペできませんね。Safari と Chromium は大丈夫のようです。通常の投稿だと文字数が多すぎてダメみいだし...、困ったものです。


あっ、『Safari と Chromium は大丈夫』が目に入らず、「コード」から部分的にペーストしてテキスト・エディタに入れました。パスの遠ている~/myPyにtags.pyとして保存しました。

  • 老齢化の為か、あたかも写経の感覚でした。
  • 門前の小僧の感じで、なんとなく流れは感じられました。
  • applescriptはfileとの遣り取りには、未だ効果的なのでしょうか。


で、テストに呼び出すと、58行目の「def」で怒られるようです、下図:


念の為に、当方の写経したコードを添付します。


時間の取れる所で、ご検討くだされば幸いです。

2019/06/07 02:27 mNeji への返信

今回の改変では、protocol、struct、extension、filter/mapを使います。


bashコマンドと同様に、エラーメッセージはstderrに表示するのが良いでしょう。

printと打ってESCキーを押して補完すると、print("...", to:&TextOutputStream)があるので選択します。


TextOutputStreamの文字を選択してコンテクストメニューを表示し、Jump to Definitionを選択します。


そうすると、TextOutputStreamが、write関数を一つだけ持つプロトコルであることがわかります。つまり、TextOutputStreamへ書き込むと、write関数が自動的に実行されるということです。


例に示されているようにTextOutputStreamプロトコルに準拠したstructを新たに定義し、write関数には文字列をstderrへ書き込むコードを書きます。

<StandardError.swift>


extensionを使って、URLクラスに新たなプロパティを定義します。これで配列を直接代入することができるようになります。

<URL+tagNames.swift>


作ったstructとextensionは、Xcodeのプロジェクトに加えるだけで使えるようになります。一度作れば使いまわせるので便利です。これらを使って書き換えてみましょう。

<main.swift>


実行結果。bashコマンドでは複数の値を取る場合","で繋げるのが慣例のようなので(psの-oやmountの-o)変更しました。それにともない、"-m"を指定することで","で繋げた結果を返すようにしました。また、"-a"で追加するとき既にある場合、最後に移動するようにしました。


2019/06/09 21:40 mNeji への返信

動きました、ありがとうございました。


ただ、使い方が悪いらしく、1回ではダメだったので、3回ほどやりました。緊急用にします。

でも、Cromeでアクセスしてみます。



他方、このフォーラムのスレッド表示が2行までが白色で、3行目が灰色、それ以降が省略となりました。これってサーバの負荷低減に役立っているのでしょうかね?


あ、編集制御がカメラだけになっていますが! 故に証拠の添付もできません......................................。


2019/06/09 22:00 mNeji への返信

Safariで入り直しました。すると、どうでしょう正常な表示となっています!さらに。「一部表示」も無く、スムーズにスレッド閲覧ができてますね。


一応、先ほどの画像を添付します。



なお、ChroneでもFirefoxと同じでした.....................................................................................................................................................。

2019/06/10 05:18 hohokihai への返信

hohokihaiさん、返信が遅れて申し訳ございません。


前回戴いたのは<main.swift>だけで、素人なりに感じは掴めました。


他方、今回は構造が複雑なこともあり、どうすれば良いかの段階で躓くいています;



> bashコマンドと同様に、エラーメッセージはstderrに表示するのが良いでしょう。

>printと打ってESCキーを押して補完すると、print("...", to:&TextOutputStream)があるので選択します。


この操作は、Xcodeでのことですか? この説明も理解が追いつけません。



また、次に続く3つの関数;

<StandardError.swift>

<URL+tagNames.swift>

<main.swift>

をXcodeのなかで、堂のように配置するかも解りません。ひょっとして別々のプロジェクトとするのでしょうか?


素人ながら<main.swift>は興味深いです。疑問なのは「-s」はカラー名のエイリアス名追加用ですか?



もしよろしければ、ソースコード部分だけ(コメントは無しでも構いませんが)を「追加テキスト」で公開していただけましやら幸いです。

  • この一両日、「画像」表示が壊れたり、治ったりと不安定です。



お忙しいところ、お時間がある時にコメント戴ければ幸いです。

2019/06/10 21:13 mNeji への返信

> 画像かと思われる部分が途中から壊れている


大量の画像を投稿するとダメみたいですね。お手数ですが"画像の再読み込み"をお願いします。


> この操作は、Xcodeでのことですか? この説明も理解が追いつけません。


そうです。少し画像が小さすぎたかもしれません。


> Xcodeのなかで、どのように配置するかも解りません。


ファイルの追加は、プロジェクトのグループ(今回ではtagnames)をコントロールクリック(2本指でクリック)して、"New File..."を選択することで行います。


今回は"Swift File"です。


ここで名前を変更します。


> 素人ながら<main.swift>は興味深いです。疑問なのは「-s」はカラー名のエイリアス名追加用ですか?


"-a"が追加、"-d"が削除、"-s"はセット(入れ替えというか上書きというか)です。オプションは使いやすいように勝手に変えて下さい。

2019/06/10 22:13 hohokihai への返信

hohokihaiさん、


早速の解説、ありがとうございます。図が大きくなって助かりました。


> そうです。少し画像が小さすぎたかもしれません。


なるほど、納得しました。



> ファイルの追加は、プロジェクトのグループ(今回ではtagnames)をコントロールクリック(2本指でクリック)して、"New File..."を選択することで行います。

> 今回は"Swift File"です。

> ここで名前を変更します。


具体的な解説ありがとうございます。

ここら辺の操作が不得意です。資料は集めてみたものの、macOSアプリ解説はまずありませんし...。



> "-s"はセット(入れ替えというか上書きというか)です。


了解です。



これらを元にトライ&エラーしてから、ご報告します。

2019/06/13 21:50 hohokihai への返信

hohokihaiさん、


早速のご確認ありがとうございました。


ご指摘のとうり、25行目に「}」を入れた結果、後尾の2行は正しく不要となりました。この空白行は全く「目」に入っていませんでした。

  • 今後、意識するようにします。


そもそもの失敗は、25行目の「$0.hasPrefix("-")」のチャーを「”ー”」と入力したことです。ハイフンはすぐに気がついたのですが...。その後、3日ほどこの周辺で悩みました。

  • 全角と半角とが明瞭に区別できるフォントを探してみます。



今日は久々に出かけるので、結果は明日になります。

このスレッドはシステム、またはAppleコミュニティチームによってロックされました。 問題解決の参考になる情報であれば、どの投稿にでも投票いただけます。またコミュニティで他の回答を検索することもできます。

「Finderで付けた複数カラー・タグ」を「Terminalコマンドで如何に処理」すればよいか?

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple Account を使ってご参加ください。