2010-03-12 9 views

Odpowiedz

8

Ten skrypt bierze nazwę pliku lub folderu jako pierwszy argument i indeks etykiety (0 oznacza bez etykiety, 1 dla czerwonego, ..., 7 dla szarego) jako drugi argument.

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

Bardziej bezpośrednio, jeśli $ nazwa_pliku jest zmienna powłoki bezwzględną nazwę ścieżki pliku lub folderu, aby być oznakowane i $ label jest zmienna powłoki z numerem indeksu etykieta,

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

jest poleceniem powłoki, które przypisuje etykietę do pliku lub folderu.

+0

To się nie powiedzie, jeśli nazwa pliku zawiera podwójne cudzysłowy lub końce ukośnikiem odwrotnym –

+0

@Kevin: Jakiekolwiek rozwiązanie tego problemu? – Svish

+0

@Kevin: Również ... dlaczego miałbyś plik zawierający podwójne cytaty? Myślałem, że jest nieważny ...a może tylko w systemie Windows ... – Svish

4

podstawie tutejszych odpowiedzi oraz w odnośnych stanowisk, zrobiłem następującą funkcję i dodaje go do mojego ~/.bash_profile pliku:

# 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 - "[email protected]" << 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 
} 
1

Istnieje również narzędzie linii poleceń „setLabel” w pakiecie osxutils. Nie wymaga AppleScript ani uruchamiania Findera.

0

Użyłoby to tej samej kolejności dla kolorów, co Finder.

#!/bin/bash 

if [[ $# -le 1 || ! "$1" =~ ^[0-7]$ ]]; then 
    echo "Usage: labelfile ..." 1>&2 
    exit 1 
fi 

colors=(0 2 1 3 6 4 5 7) 
n=${colors[$1]} 
shift 

osascript - "[email protected]" <<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 

Mam przekierowanie standardowego wyjścia błędów, ponieważ dostałem ostrzeżenia jak 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 na 10,8. STDOUT jest przekierowywane, ponieważ osascript wypisuje wartość ostatniego wyrażenia.

8

Oto krótki skrypt Pythona I napisał:

https://github.com/danthedeckie/finder_colors

który ustawia kolory folderów i plików z linii poleceń.

Zastosowanie:

finder_colors.py red /Users/daniel/src 

ustawia katalog/Users/Daniel/src być czerwony.

finder_colors.py /Users/daniel/src 

zwraca kolor (w tym przypadku teraz "czerwony"). Jeśli piszesz skrypt Pythona, możesz zaimportować finder_colors jako moduł i użyć go bezpośrednio (finder_colors.get (...) i finder_colors.set (...).

+0

Pomoże ci więcej, jeśli wytłumaczysz jak to robisz, np. poprzez odpowiednie przykłady kodu twojego rozwiązania – Pfitz

+0

Dzięki @Pfitz - dodałem Sposób działania wewnętrznie wykorzystuje wbudowaną bibliotekę Pythona do edycji rozszerzonych atrybutów pliku: Nie mogłem znaleźć eleganckiego natywnego skryptu, aby to zrobić, i nie lubię rozwiązania skryptowe. – Daniel

Powiązane problemy