Mac OS X: Cara mengubah label warna file dari Terminal

16

Apakah ada cara saya dapat mengatur label warna file ke beberapa warna saat di Terminal?

Saya tahu bahwa perintah berikut mencantumkan beberapa info tentang apa warna saat ini, tetapi saya tidak tahu cara melakukan sesuatu tentang hal itu. Suka mengubahnya.

mdls -name kMDItemFSLabel somefile.ext

Alasan saya ingin tahu adalah bahwa saya ingin secara rekursif menandai semua file dalam folder jenis tertentu dengan label warna tertentu (dalam kasus saya abu-abu).

Saya tahu bagaimana melakukan penemuan:

find . -name "*.ext"

Dan saya tahu bagaimana saya bisa menjalankan perintah setelahnya untuk setiap file menggunakan -exec, tapi saya perlu tahu bagaimana cara memberi label yang sebenarnya ...

Saya ingin solusi yang hanya melibatkan perintah bawaan untuk Mac OS X. Jadi sebaiknya tidak ada hal pihak ketiga, kecuali tidak ada cara lain.

Svish
sumber

Jawaban:

9

Berdasarkan tanggapan di sini dan di posting yang direferensikan, saya membuat fungsi berikut dan menambahkannya ke file ~ / .bash_profile saya:

# Atur warna label Finder
label(){
  if [$ # -lt 2]; kemudian
    echo "USAGE: label [0-7] file1 [file2] ..."
    echo "Mengatur label Finder (warna) untuk file"
    gema "Warna bawaan:"
    gema "0 Tidak berwarna"
    gema "1 Oranye"
    gema "2 Merah"
    gema "3 Kuning"
    gema "4 Biru"
    gema "5 Ungu"
    gema "6 Hijau"
    gema "7 Gray"
  lain
    osascript - "$ @" << EOF
    di jalankan argv
        atur labelIndex ke (item 1 dari argv sebagai angka)
        ulangi dengan i dari 2 hingga (hitungan argv)
          beri tahu aplikasi "Finder"
              atur file ke file POSIX (item i dari argv) sebagai alias
              atur indeks label file ke labelIndex
          akhiri saja
        dan ulangi
    akhirnya jalankan
EOF
  fi
}
>

Robert Harder
sumber
4

Metode osascript tampaknya rusak di Mavericks AppleScript, tetapi ini tampaknya berhasil:

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

Di bawah Mavericks ini tampaknya menggabungkan label file dengan yang sebelumnya (seperti sekarang "tag") dan dengan cara yang sama saya berharap hal di atas akan terputus di beberapa titik jika Apple menghentikan usinf atribut yang diperluas dengan cara ini. Tetapi memiliki keuntungan bekerja untuk saya sekarang dan menjadi jauh lebih cepat daripada AS.

Piersg
sumber
Ya ampun, itu perintahnya.
nathancahill
3

osascript -e "beri tahu app \" Finder \ "untuk mengatur indeks label dari file POSIX (\" / junk.txt \ ") menjadi 1"

Dave
sumber
osascript -e "tell app \"Finder\" to set label index of POSIX file (\"/junk.txt\") to 1 Bagaimana jika junk.txt benar my full/path/with spaces.txt- benar dan disimpan dalam variabel yang disebut $fileName Saya sudah mencoba banyak sintaks dan tanda kutip tunggal, tanda kutip ganda ... dan tidak ada yang berfungsi.
Anda menghindarinya dengan backslash:File\ with\ Spaces.txt
msanford
3

Ini versi saya, berdasarkan keduanya dari @Lauri dan @Robert. Anda menentukan warna menggunakan nama warna, bukan nomornya. Nama warna konsisten dengan output hfsdata -L, jadi Anda menggunakan "Tidak Ada" untuk menetapkan tidak ada warna pada file. Simpan ini dalam file yang disebut "setlabel" dan lakukan 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
Lee
sumber
Anda mungkin ingin mengedit jawaban Anda untuk referensi jawaban lain dengan @names penulis mereka. "Dua di atas" berpotensi tidak berguna, karena pengguna dapat memesan posting ini secara berbeda jika mereka mau.
JoshP
1

Untuk melihatnya di Finder (saya tahu, bukan apa yang Anda minta), Anda dapat menggunakan xattr -l, atau xattr -p com.apple.FinderInfo, Anda mendapatkan bendera di antara nol (1E), di mana bit yang lebih rendah adalah warna .. Dengan barang pihak ketiga: hfsdebug (gunakan dengan sudo) untuk mendapatkan banyak info, di antaranya label warna yang bisa dibaca.

Untuk mengubahnya dengan hal-hal bagian ketiga: osxutils memiliki perintah setlabel.

Henno
sumber
Sayangnya, osxutils hanya PPC.
1

Ini akan menggunakan urutan yang sama untuk warna sebagai 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 dialihkan karena mengubah jalur relatif ke alias menghasilkan peringatan seperti CFURLGetFSRef telah melewati URL ini yang tidak memiliki skema pada 10.8. stdout dialihkan karena osascript mencetak nilai dari ekspresi terakhir.

Lri
sumber
1

Saya suka skrip ini, namun, mereka tidak bekerja untuk file saya yang menggunakan spasi dalam nama mereka sampai saya mengubah pengaturan IFS untuk bash di dalam skrip, juga saya mengubah input file untuk menerima file teks dengan daftar nama file:

#!/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
jpetersen
sumber
0

Berikut adalah dua artikel yang menjelaskan cara melakukannya menggunakan applescript, yang pada gilirannya, dapat dipanggil dari baris perintah.

Cara mengatur label warna melalui Terminal atau applescript
dan
menandai file dengan warna di os-x finder dari skrip shell .

JRobert
sumber
bagaimana Anda memanggilnya dari command-line?
Svish
Di AppleScript Editor, Anda dapat mengkompilasi dan menyimpan skrip sebagai aplikasi. Anda dapat menjalankannya dengan menentukan jalurnya. Anda dapat menjalankan baris AppleScript dengan mendahului dengan "osascript" dan mengutip perintah Applescript. Kutipan bisa menjadi rumit, kadang-kadang ...
JRobert