Mac OS X:ターミナルからファイルの色ラベルを変更する方法


16

ターミナルでファイルの色ラベルを特定の色に設定する方法はありますか?

次のコマンドは、現在の色が何であるかについての情報を一覧表示することを知っていますが、それについて何かを行う方法がわかりません。それを変更したい。

mdls -name kMDItemFSLabel somefile.ext

私が知りたい理由は、特定の種類のフォルダー内のすべてのファイルを特定の色ラベル(私の場合は灰色)で再帰的にマークすることです。

私は発見をする方法を知っています:

find . -name "*.ext"

そして、を使用して各ファイルに対してコマンドを実行する-exec方法を知っていますが、実際のラベル付けの方法を知る必要があります...

Mac OS Xに組み込まれたコマンドのみを使用するソリューションが必要です。他の方法がない限り、サードパーティのものは使用しないでください。

回答:


9

ここと参考記事の回答に基づいて、次の関数を作成し、〜/ .bash_profileファイルに追加しました。

#Finderラベルの色を設定
ラベル(){
  if [$#-lt 2]; それから
    echo "USAGE:ラベル[0-7] file1 [file2] ..."
    echo "ファイルのFinderラベル(色)を設定します"
    echo "デフォルトの色:"
    エコー "0色なし"
    エコー "1オレンジ"
    エコー "2赤"
    エコー "3 Yellow"
    エコー "4 Blue"
    エコー "5 Purple"
    エコー "6 Green"
    エコー "7 Gray"
  そうしないと
    osascript-"$ @" << EOF
    実行時にargv
        labelIndexを(数値としてargvの項目1)に設定します
        iを2から(argvのカウント)まで繰り返します
          アプリケーション「Finder」に通知する
              ファイルをエイリアスとしてPOSIXファイル(argvのアイテムi)に設定します
              ファイルのラベルインデックスをlabelIndexに設定します
          終わらせる
        終わりの繰り返し
    エンドラン
EOF
  fi
}
>


4

osascriptメソッドはMavericks AppleScriptでは壊れているように見えますが、これはうまくいくようです:

xattr -wx com.apple.FinderInfo "0000000000000000000C00000000000000000000000000000000000000000000" /path/to/your/file

Mavericksの下では、これはファイルラベルを以前のものとマージするようです(それらは現在「タグ」であるため)、同じトークンによって、Appleがこの方法で拡張属性usinfを停止した場合、上記の時点で壊れることが予想されます。しかし、今では私のために働いており、ASよりもずっと速いという利点があります。


ああ、それはまさにコマンドです。
ナタンカヒル

3

osascript -e "app \" Finder \ "に、POSIXファイル(\" / junk.txt \ ")のラベルインデックスを1に設定するように指示します。


osascript -e "tell app \"Finder\" to set label index of POSIX file (\"/junk.txt\") to 1 junk.txtが実際にmy full/path/with spaces.txt呼び出され、変数に格納されている場合、$fileName 無数の構文と単一引用符、二重引用符を試してみましたが、どれも機能しません。

バックスラッシュでエスケープしますFile\ with\ Spaces.txt
。– msanford

3

@Lauriと@Robertの2つに基づく私のバージョンです。番号ではなく、色の名前を使用して色を指定します。色名はの出力と一致しているhfsdata -Lため、「なし」を使用してファイルに色を割り当てません。これを「setlabel」というファイルに保存して、実行しますchmod 755 setlabel

#!/bin/bash
# Set Finder label color
  if [ $# -lt 2 ]; then                                                       
    echo "USAGE: setlabel color file1 [file2] ..."
    echo "Sets the Finder label (color) for files"
    echo "Possible colors: None Orange Red Yellow Blue Purple Green Gray"
  else
  labelargs=$@
  color=$1
  file=$2
  colorarray=( None Orange Red Yellow Blue Purple Green Gray )
  colorvalue=8
  for i in {0..7}
     do
      if [ "${color}" == ${colorarray[${i}]} ]
      then
         colorvalue=${i}
      fi
     done
  if [ "${colorvalue}" == "8" ]
      then
         echo Color ${color} is not recognized.
     echo "Possible colors: None Orange Red Yellow Blue Purple Green Gray"
     else
    osascript - ${colorvalue} ${file} << EOF >/dev/null 2>&1
    on run argv
        set labelIndex to (item 1 of argv as number)
        repeat with i from 2 to (count of argv)
          tell application "Finder"
              set theFile to POSIX file (item i of argv) as alias
              set label index of theFile to labelIndex
          end tell
        end repeat
    end run
EOF
    fi
  fi

作成者の@nameが他の回答を参照するように回答を編集することもできます。「上記の2つ」は、ユーザーが必要に応じてこれらの投稿の順序を変えることができるため、役に立たない可能性があります。
JoshP

1

Finderでそれらを表示するには(私が聞いたことではなく、知っている)xattr -lまたはxattr -p com.apple.FinderInfoを使用して、ゼロ(1E)の間にフラグを取得できます。色..サードパーティのもの:hfsdebug(sudoで使用)で多くの情報を取得します。その中には読み取り可能なカラーラベルがあります。

サードパーティのものでそれらを変更するには:osxutilsにはsetlabelコマンドがあります。


残念ながら、osxutilsはPPCのみです。

1

これは、Finderと同じ色の順序を使用します。

#!/bin/bash

if [[ $# -le 1 || ! "$1" =~ ^[0-7]$ ]]; then
  echo "usage: label 01234567 FILE..." 1>&2
  exit 1
fi

colors=( 0 2 1 3 6 4 5 7 )
n=${colors[$1]}
shift

osascript - "$@" <<END > /dev/null 2>&1
on run arguments
tell app "Finder"
repeat with f in arguments
set f to (posix file (contents of f) as alias)
set label index of f to $n
end
end
end
END

相対パスをエイリアスに変換すると、CFURLGetFSRefに10.8 のスキームを持たないこのURLが渡されたような警告が表示されるため、stderrはリダイレクトされます。osascriptは最後の式の値を出力するため、stdoutはリダイレクトされます。


1

これらのスクリプトは大好きですが、スクリプト内でbashのIFS設定を変更するまで、名前にスペースを使用したファイルでは機能しませんでした。また、ファイル入力を変更して、ファイル名のリストを含むテキストファイルを受け入れます:

#!/bin/bash
# Set Finder label color of files in a list
# set the Internal Field Separator to \n (newline)
IFS=$'\n'
  if [ $# -lt 2 ]; then                                                       
    echo "USAGE: LabelFilelist color Path/to/filelist ..."
    echo "Sets the Finder label (color) for files"
    echo "Possible colors: None Orange Red Yellow Blue Purple Green Gray"
  else

 labelargs=$@
  color=$1
  file=`cat < $2`
  colorarray=( None Orange Red Yellow Blue Purple Green Gray )
  colorvalue=8
  for i in {0..7}
     do
      if [ "${color}" == ${colorarray[${i}]} ]
      then
         colorvalue=${i}
      fi
     done
  if [ "${colorvalue}" == "8" ]
      then
         echo Color ${color} is not recognized.
     echo "Possible colors: None Orange Red Yellow Blue Purple Green Gray"
     else
    osascript - ${colorvalue} ${file} << EOF >/dev/null 2>&1
    on run argv
        set labelIndex to (item 1 of argv as number)
        repeat with i from 2 to (count of argv)
          tell application "Finder"
              set theFile to POSIX file (item i of argv) as alias
              set label index of theFile to labelIndex
          end tell
        end repeat
    end run
EOF
    fi
  fi

0

AppleScriptを使用してこれを行う方法を説明する2つの記事を次に示します。これらのスクリプトはコマンドラインから呼び出すことができます。

ターミナルまたはapplescript
介してカラーラベルを設定し
、シェルスクリプトからos-xファインダーでファイルに色付ける方法


コマンドラインからどのように呼び出すのですか?
Svish

AppleScript Editorでは、スクリプトをアプリケーションとしてコンパイルして保存できます。パスを指定することで実行できます。AppleScriptの行で実行するには、その前に「osascript」を付けてApplescriptコマンドを引用します。引用は複雑になる場合があります
...-JRobert
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.