Mac OS X: как изменить цветовую метку файлов с терминала

есть ли способ установить цветовую метку файла в какой-то цвет, когда в терминале?

Я знаю, что следующая команда перечисляет некоторую информацию о том, что цвет в настоящее время, но я не могу понять, как это сделать. Как изменить его.

mdls -name kMDItemFSLabel somefile.ext

причина, по которой я хотел бы знать, что я хочу, чтобы рекурсивно все файлы в папке определенного типа, с определенным ярлыком цвета (в моем случае серый).

Я знаю, как сделать находка:

find . -name "*.ext"

и я знаю, как я могу запустить команду впоследствии для каждого файла с помощью -exec, но мне нужно знать, как делать фактической маркировки...

Я хотел бы решение, которое включает в себя только команды, встроенные в Mac OS X. Поэтому желательно не 3rd party материал, если нет другого способа.

12
задан Svish
10.05.2023 23:50 Количество просмотров материала 2763
Распечатать страницу

8 ответов

основываясь на ответах здесь и в ссылочных сообщениях, я сделал следующую функцию и добавил ее в свой ~/.файл bash_profile:

# Set Finder label color
label(){
  if [ $# -lt 2 ]; then
    echo "USAGE: label [0-7] file1 [file2] ..."
    echo "Sets the Finder label (color) for files"
    echo "Default colors:"
    echo " 0  No color"
    echo " 1  Orange"
    echo " 2  Red"
    echo " 3  Yellow"
    echo " 4  Blue"
    echo " 5  Purple"
    echo " 6  Green"
    echo " 7  Gray"
  else
    osascript - "$@" << EOF
    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
}
>
9
отвечен Robert Harder 2023-05-12 07:38

методы osascript, кажется, сломана в Маверикс помощью AppleScript, но это, кажется, работает:

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

под Mavericks это, кажется, сливает метку файла с предыдущей (поскольку они теперь "теги"), и по тому же знаку я ожидаю, что вышеописанное сломается в какой-то момент, если Apple остановит расширенные атрибуты usinf таким образом. Но это работает для меня сейчас и быть гораздо быстрее, чем как.

4
отвечен Piersg 2023-05-12 09:55

osascript-e "скажите app \"Finder\", чтобы установить индекс метки файла POSIX (\"/junk.txt\") to 1"

3
отвечен Dave 2023-05-12 12:12

вот моя версия, основанная на двух из @Lauri и @Robert. Вы указываете цвет, используя имя цвета, а не номер. Имена цветов согласуются с выводом hfsdata -L, поэтому вы используете "None", чтобы назначить файлу цвет. Сохраните это в файле под названием "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=
  file=
  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
2
отвечен Lee 2023-05-12 14:29

чтобы просмотреть их в Finder (я знаю, не то, что вы просили), вы можете использовать xattr-l или xattr-p com.яблоко.FinderInfo, вы получаете флаг среди нулей (1E), из которых нижние биты являются цветом.. Со сторонним материалом:hfsdebug (используйте с sudo), чтобы получить много информации, среди которых читаемая цветная этикетка.

чтобы изменить их с третьей части вещи:osxutils имеет команду setlabel.

1
отвечен Henno 2023-05-12 16:46

используется тот же порядок цветов, что и в Finder.

#!/bin/bash

if [[ $# -le 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[]}
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. stdout перенаправляется, поскольку osascript печатает значение последнего выражения.

1
отвечен user495470 2023-05-12 19:03

Я люблю эти скрипты, но они не работают для файлов, которые использовали пробелы в именах, пока я не изменил МФС установка для bash в скрипте, также я изменил файл input принять текстовый файл со списком имен:

#!/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=
  file=`cat < `
  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 2023-05-12 21:20

вот две статьи, описывающие, как это сделать с помощью applescript, который, в свою очередь, может быть вызван из командной строки.

как установить цветовую метку через терминал или applescript

и

пометка файлов с цветами в OS-x finder из shell scripts.

0
отвечен JRobert 2023-05-12 23:37

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх