Mac OS X: Cách thay đổi nhãn màu của tệp từ Terminal


16

Có cách nào để tôi có thể đặt nhãn màu của tệp thành một số màu khi ở trong Terminal không?

Tôi biết rằng lệnh sau liệt kê một số thông tin về màu sắc hiện tại là gì, nhưng tôi không thể tìm ra cách thực hiện điều gì đó về nó. Giống như thay đổi nó.

mdls -name kMDItemFSLabel somefile.ext

Lý do tôi muốn biết là tôi muốn đánh dấu đệ quy tất cả các tệp trong một thư mục thuộc một loại nhất định với nhãn màu nhất định (trong trường hợp của tôi là màu xám).

Tôi biết làm thế nào để tìm ra:

find . -name "*.ext"

Và tôi biết làm thế nào tôi có thể chạy lệnh sau đó cho mỗi tệp bằng cách sử dụng -exec, nhưng tôi cần biết cách thực hiện ghi nhãn thực tế ...

Tôi muốn một giải pháp chỉ liên quan đến các lệnh được tích hợp sẵn cho Mac OS X. Vì vậy, tốt nhất là không có nội dung của bên thứ 3, trừ khi không có cách nào khác.

Câu trả lời:


9

Dựa trên các phản hồi ở đây và trong các bài đăng được tham chiếu, tôi đã thực hiện chức năng sau và thêm nó vào tệp ~ / .bash_profile của mình:

# Đặt màu nhãn Finder
nhãn(){
  nếu [$ # -lt 2]; sau đó
    tiếng vang "SỬ DỤNG: nhãn [0-7] file1 [file2] ..."
    echo "Đặt nhãn Finder (màu) cho tệp"
    echo "Màu mặc định:"
    tiếng vang "0 Không màu"
    tiếng vang "1 quả cam"
    tiếng vang "2 đỏ"
    tiếng vang "3 màu vàng"
    tiếng vang "4 màu xanh"
    tiếng vang "5 màu tím"
    tiếng vang "6 xanh"
    tiếng vang "7 xám"
  khác
    osascript - "$ @" << EOF
    chạy argv
        đặt nhãn Index thành (mục 1 của argv làm số)
        lặp lại với i từ 2 đến (số argv)
          nói với ứng dụng "Finder"
              đặt tệpFile thành tệp POSIX (mục i của argv) làm bí danh
              đặt chỉ mục nhãn của theFile thành nhãn Index
          kết thúc
        kết thúc lặp lại
    Kết thúc
EOF
  fi
}
>


4

Các phương thức osascript dường như bị hỏng trong Mavericks AppleScript, nhưng điều này dường như hoạt động:

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

Trong Mavericks, điều này dường như hợp nhất nhãn tệp với nhãn trước đó (vì hiện tại chúng là "thẻ") và bằng chính mã thông báo mà tôi mong muốn ở trên sẽ phá vỡ tại một số điểm nếu Apple ngừng sử dụng các thuộc tính mở rộng theo cách này. Nhưng nó có lợi thế là làm việc cho tôi bây giờ và nhanh hơn rất nhiều so với AS.


Ôi trời, đó hoàn toàn là mệnh lệnh.
nathancahill

3

osascript -e "báo cho ứng dụng \" Finder \ "để đặt chỉ mục nhãn của tệp POSIX (\" / rác.txt \ ") thành 1"


osascript -e "tell app \"Finder\" to set label index of POSIX file (\"/junk.txt\") to 1 Điều gì sẽ xảy ra nếu rác.txt thực sự my full/path/with spaces.txtvà được lưu trữ trong một biến có tên là $fileName Tôi đã thử vô số cú pháp và dấu ngoặc đơn, dấu ngoặc kép ... và không có cái nào trong số chúng hoạt động.

Bạn thoát khỏi nó bằng dấu gạch chéo ngược:File\ with\ Spaces.txt
msanford

3

Đây là phiên bản của tôi, dựa trên hai từ @Lauri và @Robert. Bạn chỉ định màu bằng cách sử dụng tên của màu chứ không phải số. Tên màu phù hợp với đầu ra của hfsdata -L, vì vậy bạn sử dụng "Không" để gán không màu cho tệp. Lưu cái này trong một tập tin gọi là "setlabel" và làm 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

Bạn có thể muốn chỉnh sửa câu trả lời của mình để tham khảo các câu trả lời khác theo tên tác giả của họ. "Hai bên trên" có khả năng vô dụng, vì người dùng có thể đặt hàng các bài đăng này khác nhau nếu họ muốn.
JoshP

1

Để xem chúng trong Finder (tôi biết, không phải những gì bạn đã hỏi), bạn có thể sử dụng xattr -l hoặc xattr -p com.apple. DownloaderInfo, bạn nhận được một cờ trong số các số 0 (1E), trong đó các bit thấp hơn là màu sắc .. Với nội dung của bên thứ ba: hfsdebug (sử dụng với sudo) để có được nhiều thông tin, trong đó có nhãn màu dễ đọc.

Để thay đổi chúng với phần thứ ba: osxutils có lệnh setlabel.


Thật không may, osxutils chỉ là PPC.

1

Điều này sẽ sử dụng cùng thứ tự cho các màu như 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 được chuyển hướng bởi vì chuyển đổi một đường dẫn tương đối thành bí danh dẫn đến một cảnh báo như CFURLGetFSRef đã được thông qua URL này không có sơ đồ vào ngày 10.8. thiết bị xuất chuẩn được chuyển hướng vì osascript in giá trị của biểu thức cuối cùng.


1

Tôi yêu các tập lệnh này, tuy nhiên, chúng không hoạt động cho các tệp của tôi sử dụng khoảng trắng trong tên của chúng cho đến khi tôi thay đổi cài đặt IFS cho bash trong tập lệnh, tôi cũng thay đổi đầu vào tệp để chấp nhận tệp văn bản có danh sách tên tệp:

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

Dưới đây là hai bài viết mô tả cách thực hiện bằng cách sử dụng applescript, có thể lần lượt được gọi từ dòng lệnh.

Cách đặt nhãn màu thông qua Terminal hoặc applescript

gắn thẻ các tệp có màu trong công cụ tìm os-x từ tập lệnh shell .


Làm thế nào bạn sẽ gọi nó từ một dòng lệnh?
Svish

Trong AppleScript Editor, bạn có thể biên dịch và lưu tập lệnh dưới dạng một ứng dụng. Bạn có thể chạy nó bằng cách chỉ định đường dẫn của nó. Bạn có thể chạy trên dòng AppleScript bằng cách đặt trước nó bằng "osascript" và trích dẫn lệnh Applescript. Việc trích dẫn có thể trở nên phức tạp, đôi khi ...
JRobert
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.