Mac OS X: Como alterar o rótulo colorido dos arquivos do Terminal

16

Existe uma maneira de definir o rótulo de cor de um arquivo para alguma cor no Terminal?

Eu sei que o seguinte comando lista algumas informações sobre o que a cor é atualmente, mas não consigo descobrir como fazer algo sobre isso. Como mudar isso.

mdls -name kMDItemFSLabel somefile.ext

O motivo pelo qual eu gostaria de saber é que quero marcar recursivamente todos os arquivos em uma pasta de um determinado tipo com um determinado rótulo de cor (no meu caso, cinza).

Eu sei como fazer a descoberta:

find . -name "*.ext"

E sei como posso executar o comando posteriormente para cada arquivo usando -exec , mas preciso saber como fazer a rotulagem real ...

Eu gostaria de uma solução que envolva apenas comandos incorporados ao Mac OS X. Então, de preferência, nenhum material de terceiros, a menos que não haja outra maneira.

    
por Svish 28.07.2010 / 19:10

8 respostas

9

Com base nas respostas aqui e nas postagens referenciadas, fiz a seguinte função e a adicionei ao meu arquivo ~ / .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
}
>     
por 09.03.2011 / 21:19
4

Os métodos do osascript parecem quebrados no Mavericks AppleScript, mas isso parece funcionar:

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

Em Mavericks isso parece mesclar o rótulo do arquivo com o anterior (como eles são agora "tags") e pelo mesmo token eu esperaria que o acima para quebrar em algum momento se a Apple parar de usar os atributos estendidos neste caminho. Mas tem a vantagem de trabalhar para mim agora e ser muito mais rápido que o AS.

    
por 09.05.2014 / 14:12
3

osascript -e "diz ao aplicativo \" Finder \ "para definir o índice de etiqueta do arquivo POSIX (\" / junk.txt \ ") para 1"

    
por 28.08.2010 / 03:34
2

Aqui está minha versão, baseada nos dois de @Lauri e @Robert. Você especifica a cor usando o nome da cor, não o número. Os nomes das cores são consistentes com a saída de hfsdata -L , portanto, você usa "Nenhum" para atribuir nenhuma cor ao arquivo. Salve isso em um arquivo chamado "setlabel" e faça 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
    
por 16.09.2012 / 04:04
1

Para vê-los no Finder (eu sei, não o que você pediu) você pode usar xattr -l, ou xattr -p com.apple.FinderInfo, você obtém um sinalizador entre os zeros (1E), dos quais o menor bits são a cor .. Com material de terceiros: hfsdebug (use com o sudo) para obter muitas informações, entre as quais um rótulo colorido legível.

Para alterá-los com material de terceiros: osxutils tem um comando setlabel.

    
por 28.07.2010 / 20:43
1

Isso usaria a mesma ordem para as cores do 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 é redirecionado porque converter um caminho relativo em um alias resulta em um aviso como CFURLGetFSRef foi passado este URL que não tem esquema no 10.8. O stdout é redirecionado porque o osascript imprime o valor da última expressão.

    
por 06.09.2012 / 13:35
1

Eu amo esses scripts, no entanto, eles não estavam trabalhando para meus arquivos que usavam espaços em seus nomes até que eu mudei a configuração do IFS para bash dentro do script, também mudei a entrada do arquivo para aceitar um arquivo de texto com uma lista de nomes de arquivos:

#!/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
    
por 12.08.2015 / 00:06
0

Aqui estão dois artigos descrevendo como fazer isso usando o applescript, que pode, por sua vez, ser invocado a partir da linha de comando.

Como definir o rótulo de cor via Terminal ou applescript
e
marcação de arquivos com cores no sistema operacional -x finder de scripts de shell .

    
por 28.07.2010 / 20:15