web-dev-qa-db-ja.com

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

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

次のコマンドを実行すると、現在の色についての情報がいくつか表示されますが、それをどう処理するかわかりません。それを変えるように。

mdls -name kMDItemFSLabel somefile.ext

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

私は発見の仕方を知っています:

find . -name "*.ext"

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

Mac OS Xに組み込まれているコマンドのみを含むソリューションが欲しいので、他に方法がない限り、サードパーティのものはできません。

18
Svish

ここと参照された投稿の応答に基づいて、次の関数を作成し、それを〜/ .bash_profileファイルに追加しました。

#Finderラベルの色を設定
 label(){
 if [$#-lt 2]; then 
 echo "使用法:ラベル[0-7] file1 [file2] ..." 
 echo "ファイルのFinderラベル(色)を設定します" 
 echo "デフォルトの色: "
 echo" 0 No color "
 echo" 1 Orange "
 echo" 2 Red "
 echo" 3 Yellow "
 echo" 4ブルー "
エコー" 5パープル "
エコー" 6グリーン "
エコー" 7グレー "
その他
 osascript-" $ @ " << EOF 
実行時にargv 
 labelIndexを(argvの項目1を数値として)
 iを2から(argvのカウント)
まで繰り返してアプリケーションに通知"Finder" 
 theFile to POSIX file(item i of argv)as alias 
 set the file index of theFile [label _ 
 end tell 
 end repeat 
実行を終了
 EOF 
 fi 
}
9
Robert Harder

Mosaricks AppleScriptではosascriptメソッドが壊れているように見えますが、これは機能するようです。

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

Mavericksでは、これはファイルラベルを以前のものとマージするようになり(現在は「タグ」となっているため)、同じトークンでAppleこのようにして、usinf拡張属性を停止しますが、これは私にとって今すぐ機能し、ASよりもはるかに高速であるという利点があります。

4
Piersg

@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
3
Lee

osascript -e "POSIXファイル(\"/junk.txt\")のラベルインデックスを1に設定するように「アプリ\" Finder\"に伝える」

3
Dave

これは、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

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

1
Lri

Finderでそれらを表示するには(私が知っている、あなたが尋ねたことではありません)、xattr -lまたはxattr -p com.Apple.FinderInfoを使用できます。ゼロ(1E)の間にフラグがあり、その下位ビットはcolour ..サードパーティのもの: hfsdebug (Sudoで使用)多くの情報を取得します。その中に、読みやすいカラーラベルがあります。

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

1
Henno

私はこれらのスクリプトが大好きですが、スクリプト内で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
1
jpetersen

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

ターミナルまたはapplescriptを使用してカラーラベルを設定する方法
そして
シェルスクリプトからのos-x Finderでのファイルの色付け

0
JRobert