Mac OS X:如何从终端更改文件的颜色标签


16

在终端中时,是否可以将文件的颜色标签设置为某种颜色?

我知道以下命令列出了有关当前颜色的一些信息,但我不知道如何对它进行处理。喜欢改变它。

mdls -name kMDItemFSLabel somefile.ext

我想知道的原因是我想用某种颜色标签(在我的情况下为灰色)以递归方式标记某种类型的文件夹中的所有文件。

我知道如何进行发现:

find . -name "*.ext"

而且我知道以后如何使用来为每个文件运行命令-exec,但是我需要知道如何进行实际标记...

我想要一个仅涉及Mac OS X内置命令的解决方案。因此,除非没有其他方法,否则最好不要包含任何第三方的东西。

Answers:


9

根据此处和引用的帖子中的回复,我做了以下功能并将其添加到我的〜/ .bash_profile文件中:

#设置Finder标签颜色
标签(){
  如果[$#-lt 2]; 然后
    回显“用法:标签[0-7] file1 [file2] ...”
    回显“设置文件的Finder标签(颜色)”
    回显“默认颜色:”
    回声“ 0无颜色”
    回声“ 1橙色”
    回声“ 2 Red”
    回声“ 3黄色”
    回声“ 4 Blue”
    回声“ 5紫”
    回声“ 6绿色”
    回声“ 7灰色”
  其他
    osascript-“ $ @” << EOF
    在运行argv
        将labelIndex设置为(argv的项目1作为数字)
        重复从2到(argv的数量)的i
          告诉应用程序“ Finder”
              将File设置为POSIX文件(argv的项目i)作为别名
              将文件的标签索引设置为labelIndex
          结束告诉
        结束重复
    结束运行
紧急行动
  科幻
}
>


4

osascript方法在Mavericks AppleScript中似乎已损坏,但这似乎可行:

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

在Mavericks下,这似乎是将文件标签与上一个标签合并(因为它们现在是“标签”),并且出于同样的原因,如果苹果公司以这种方式停止使用扩展属性,我希望以上内容在某个时候会破裂。但是它的优点是现在为我工作,并且比AS快很多。


哦,天哪,这就是命令。
nathancahill

3

osascript -e“ tell 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的两个版本。您使用颜色名称而不是数字指定颜色。颜色名称与的输出一致hfsdata -L,因此您可以使用“无”为文件指定颜色。将其保存在名为“ setlabel”的文件中,然后执行do 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引用其他答案。“上面的两个”可能没有用,因为用户可以根据需要对这些帖子进行不同的排序。
JoshP 2012年

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

重定向stderr是因为将相对路径转换为别名会导致警告,例如CFURLGetFSRef传递了此URL,该URL在10.8 上没有任何方案。重定向标准输出是因为osascript打印了最后一个表达式的值。


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进行操作,而applescript又可以从命令行调用。

如何通过Terminal或applescript设置颜色标签,
以及如何
在Shell脚本的os-x finder中使用颜色标记文件


您如何从命令行调用它?
Svish

在AppleScript编辑器中,您可以编译脚本并将其另存为应用程序。您可以通过指定其路径来运行它。您可以在AppleScript行上运行,方法是在其前面加上“ osascript”并引用Applescript命令。有时报价可能会变得复杂...
JRobert
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.