Mac OS X: Dosyaların renk etiketini Terminal'den değiştirme


16

Terminal'deyken bir dosyanın renk etiketini bir renge ayarlayabileceğim bir yol var mı?

Aşağıdaki komutun, rengin şu anda ne olduğu hakkında bazı bilgileri listelediğini biliyorum, ancak bu konuda bir şeylerin nasıl yapılacağını anlayamıyorum. Değiştirmek gibi.

mdls -name kMDItemFSLabel somefile.ext

Bilmek istediğim nedeni, belirli bir türdeki bir klasördeki tüm dosyaları belirli bir renk etiketi (benim durumumda gri) ile özyineli olarak işaretlemek istiyorum.

Bulguyu nasıl yapacağımı biliyorum:

find . -name "*.ext"

Ve daha sonra her dosya için komutu daha sonra nasıl çalıştırabileceğimi biliyorum -exec, ancak gerçek etiketlemeyi nasıl yapacağımı bilmeliyim ...

Sadece Mac OS X'te yerleşik komutları içeren bir çözüm istiyorum. Başka bir yol olmadığı sürece, tercihen 3. taraf malzeme yok.

Yanıtlar:


9

Buradaki ve referans verilen gönderilerdeki yanıtlara dayanarak, aşağıdaki işlevi yaptım ve ~ / .bash_profile dosyama ekledim:

# Bulucu etiket rengini ayarlama
etiket(){
  eğer [$ # -lt 2]; sonra
    echo "KULLANIM: etiket [0-7] dosya1 [dosya2] ..."
    echo "Dosyalar için Finder etiketini (renk) ayarlar"
    echo "Varsayılan renkler:"
    echo "0 Renk yok"
    echo "1 Turuncu"
    echo "2 Kırmızı"
    echo "3 Sarı"
    echo "4 Mavi"
    echo "5 Mor"
    echo "6 Yeşil"
    echo "7 Gri"
  Başka
    osascript - "$ @" << EOF
    koşarken argv
        labelIndex öğesini (argv'nin öğe 1'i sayı olarak) olarak ayarlayın
        i ile 2'den (argv sayısı) tekrarlayın
          uygulama "Bulucu" söyle
              Dosyayı POSIX dosyasına (argv öğesinin i) takma ad olarak ayarlayın
              Dosya'nın etiket dizinini labelIndex olarak ayarlayın
          son söyle
        tekrar et
    son koşu
EOF
  fi
}
>


4

Osascript yöntemleri Mavericks AppleScript'te bozuk gibi görünüyor, ancak bu işe yarıyor gibi görünüyor:

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

Mavericks altında bu dosya etiketini bir öncekiyle (şimdi "etiketler" oldukları gibi) birleştiriyor gibi görünüyor ve aynı şekilde Apple'ın genişletilmiş özellikleri bu şekilde durdurması durumunda yukarıdakilerin bir noktada kırılmasını beklerdim. Ama şimdi benim için çalışmanın ve AS'den çok daha hızlı olmanın avantajı var.


Aman tanrım, bu oldukça emirdir.
nathancahill

3

osascript -e "POSIX dosyasının (\" / junk.txt \ ") etiket dizinini 1" olarak ayarlaması için \ "Finder \" uygulamasına söyleyin


osascript -e "tell app \"Finder\" to set label index of POSIX file (\"/junk.txt\") to 1 Junk.txt gerçekten my full/path/with spaces.txtve denilen bir değişkende saklanırsa, $fileName Ben sayısız sözdizimi ve tek tırnak, çift tırnak ... denedim ve hiçbiri çalışmıyor.

Ters eğik çizgilerle File\ with\ Spaces.txt
kaçıyorsunuz

3

İşte @Lauri ve @Robert'in ikisine dayanan versiyonum. Rengi, sayıyı değil, rengin adını kullanarak belirtirsiniz. Renk adları, çıktılarıyla tutarlıdır hfsdata -L, bu nedenle dosyaya renk atamak için "Yok" seçeneğini kullanırsınız. Bunu "setlabel" adlı bir dosyaya kaydedin ve yapın 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

Cevabınızı, yazarlarının @ adları tarafından verilen diğer yanıtlara referans vermek için düzenlemek isteyebilirsiniz. "Yukarıdaki ikisi" potansiyel olarak işe yaramaz, çünkü bir kullanıcı isterse bu yayınları farklı şekilde sipariş edebilir.
JoshP

1

Onları Finder'da görüntülemek için (istediğini bilmiyorum, xattr -l veya xattr -p com.apple.FinderInfo kullanabilirsiniz), sıfır bitleri (1E) arasında bir bayrak alırsınız. renk .. Üçüncü taraflarla: hfsdebug (sudo ile kullanın), aralarında okunabilir bir renk etiketi olan çok fazla bilgi almak için.

Bunları üçüncü kısımlarla değiştirmek için: osxutils bir setlabel komutuna sahiptir.


Ne yazık ki, osxutils sadece PPC'dir.

1

Bu, renkler için Finder ile aynı sırayı kullanır.

#!/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, göreli bir yolu takma ada dönüştürmek, CFURLGetFSRef gibi bir uyarının 10.8'de şeması olmayan bu URL'yi geçirdiği için yeniden yönlendirilir . stsas, osascript son ifadenin değerini yazdırdığı için yeniden yönlendirilir.


1

Bu komut dosyalarını seviyorum, ancak komut dosyasında bash için IFS ayarını değiştirinceye kadar adlarında boşluk kullanan dosyalarım için çalışmadılar, ayrıca dosya adlarını içeren bir metin dosyasını kabul etmek için dosya girişini değiştirdim:

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

Burada elma komutunu kullanarak bunu nasıl yapacağınızı açıklayan iki makale var, bu da komut satırından çağrılabilir.

Terminal veya applecript ile renk etiketini ayarlama
ve
kabuk komut dosyalarından os-x finder'da renklerle dosyaları etiketleme .


bunu komut satırından nasıl çağırırsınız?
Svish

AppleScript Editor'da bir komut dosyasını uygulama olarak derleyebilir ve kaydedebilirsiniz. Bunu yolunu belirterek çalıştırabilirsiniz. Önceden "osascript" ile ve Applescript komutunu vererek AppleScript satırında çalıştırabilirsiniz. Alıntı bazen karmaşık olabilir ...
JRobert
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.