Пометка файлов цветами в OS X Finder из сценариев оболочки - PullRequest
9 голосов
/ 12 марта 2010

Можно пометить файлы и папки цветом в Mac OS X Finder. Есть ли способ сделать это из сценария оболочки?

Ответы [ 6 ]

8 голосов
/ 09 октября 2012

Вот быстрый скрипт на python, который я написал:

https://github.com/danthedeckie/finder_colors

, который устанавливает цвета папок и файлов из командной строки.

Использование:

finder_colors.py red /Users/daniel/src

устанавливает каталог / Users / daniel / src красным.

finder_colors.py /Users/daniel/src

возвращает цвет (в данном случае «красный»). Если вы пишете скрипт на python, вы можете импортировать finder_colors как модуль и использовать его напрямую (finder_colors.get (...) и finder_colors.set (...).

8 голосов
/ 13 марта 2010

Этот сценарий оболочки принимает имя файла или папки в качестве первого аргумента, а индекс метки (0 для отсутствия метки, 1 для красного, ..., 7 для серого) в качестве второго аргумента.

#!/bin/sh
osascript -e "tell application \"Finder\" to set label index of alias POSIX file \"`cd -P -- "$(dirname -- "$1")" && printf '%s\n' "$(pwd -P)/$(basename -- "$1")"`\" to $2"

Точнее, если $ filename является переменной оболочки с абсолютным путем к файлу или папке, которая будет помечена, а $ label является переменной оболочки с номером индекса метки,

osascript -e "tell application \"Finder\" to set label index of alias POSIX file \"$filename\" to $label"

- это команда оболочки для назначения метки файлу или папке.

4 голосов
/ 09 марта 2011

Основываясь на ответах здесь и в ссылках, я сделал следующую функцию и добавил ее в мой ~/.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
}
2 голосов
/ 12 марта 2010

Один ужасный способ сделать это будет:

exec osascript <<\EOF
tell app "Finder"

    -- [...]
    -- selecting the file
    -- [...]

    -- 4 is Blue
    set label index of thisItem to 4
end tell

По сути, запуск appleScript, который использует finder для установки цвета.

Я получил подсказки от:

(Цвет) http://www.macosxhints.com/article.php?story=20070602122413306

(Оболочка) http://www.macosxhints.com/article.php?story=20040617170055379

1 голос
/ 16 сентября 2012

Для цветов будет использоваться тот же порядок, что и для 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 application "Finder"
repeat with f in arguments
set f to (posix file (contents of f) as alias)
set label index of f to $n
end repeat
end tell
end
END

Я перенаправляю STDERR, потому что на 10.8 я получил предупреждения типа 2012-09-06 13:50:00.965 osascript[45254:707] CFURLGetFSRef was passed this URL which has no scheme (the URL may not work with other CFURL routines): test.txt. STDOUT перенаправляется, потому что osascript печатает значение последнего выражения.

1 голос
/ 12 марта 2012

В пакете osxutils также есть инструмент командной строки 'setlabel'.Он не требует AppleScript или запуска Finder.

...