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


16

Чи є спосіб я встановити кольорову мітку файлу на якийсь колір, коли в Терміналі?

Я знаю, що в наступній команді перераховано деяку інформацію про те, що є кольором в даний час, але я не можу зрозуміти, як щось з цим зробити. Як би змінити.

mdls -name kMDItemFSLabel somefile.ext

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

Я знаю, як зробити висновок:

find . -name "*.ext"

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

Мені б хотілося рішення, яке включає лише команди, вбудовані в Mac OS X. Тому бажано, щоб не було сторонніх матеріалів, якщо немає іншого способу.

Відповіді:


9

Виходячи з відповідей тут і в посиланнях, я зробив наступну функцію і додав її до свого файлу ~ / .bash_profile:

# Встановити колір мітки Finder
label () {
  якщо [$ # -lt 2]; тоді
    ехо "ВИКОРИСТАННЯ: label [0-7] file1 [file2] ..."
    echo "Встановлює мітку Finder (колір) для файлів"
    echo "Кольори за замовчуванням:"
    відлуння "0 Без кольору"
    відлуння "1 апельсин"
    відлуння "2 червоних"
    відлуння "3 жовтий"
    відлуння "4 синіх"
    відлуння "5 фіолетових"
    відлуння "6 зелених"
    відлуння "7 сірий"
  ще
    osascript - "$ @" << EOF
    на ходу аргв
        встановити labelIndex на (пункт 1 аргументу як номер)
        повторити з i від 2 до (кількість аргументів)
          скажіть програмі "Finder"
              встановіть файл для файлу POSIX (елемент i argv) як псевдонім
              встановити індекс мітки файлу на labelIndex
          кінець розповісти
        кінець повторити
    кінцевий пробіг
EOF
  фі
}
>


4

Методи osascript здаються порушеними в Mavericks AppleScript, але це, здається, працює:

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

Під Mavericks це, здається, об'єднує мітку файлу з попередньою (так як вони зараз "теги"), і таким же чином я б очікував, що вищезгадане порушиться в якийсь момент, якщо Apple зупинить використання таким чином розширених атрибутів. Але має перевагу працювати зараз для мене і бути набагато швидшим, ніж AS.


О мій, це цілком команда.
nathancahill

3

osascript -e "скажіть програмі \" 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
уникаєте цього нахилу

3

Ось моя версія, заснована на двох від @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=$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

Ви можете відредагувати свою відповідь, щоб посилатися на інші відповіді на імена їх авторів @. "Два вище" є потенційно марними, оскільки користувач може замовити ці публікації по-різному, якщо захоче.
JoshP

1

Щоб переглянути їх у Finder (я знаю, не те, про що ви запитували), ви можете використовувати xattr -l або xattr -p com.apple.FinderInfo, ви отримуєте прапор серед нулів (1E), серед яких нижчі біти - це Колір .. З сторонніми матеріалами: hfsdebug (використовуйте з судо ), щоб отримати багато інформації, серед якої читабельну кольорову мітку.

Щоб змінити їх за допомогою третьої частини: osxutils має команду setlabel.


На жаль, osxutils є лише КПП.

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-адресою, що не має схеми на 10.8. stdout переспрямовується, тому що osascript друкує значення останнього виразу.


1

Мені подобаються ці сценарії, однак вони не працювали для моїх файлів, які використовували пробіли у своїх іменах, поки я не змінив налаштування IFS для bash в сценарії, а також змінив вхідний файл, щоб прийняти текстовий файл із переліком імен файлів:

#!/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

Ось дві статті, що описують, як це зробити за допомогою яблучного скрипта, який, у свою чергу, може бути викликаний з командного рядка.

Як встановити кольорову мітку за допомогою Terminal або applescript
і
позначення файлів кольорами в OS-x Finder із скриптів оболонки .


як би ви назвали це з командного рядка?
Свиш

У редакторі AppleScript можна компілювати та зберігати сценарій як додаток. Ви можете запустити це, вказавши його шлях. Ви можете запустити лінію AppleScript, попередньо додавши її до "osascript" і посилаючись на команду Applescript.
Цитування
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.