Mac OS X: วิธีเปลี่ยนฉลากสีของไฟล์จาก Terminal


16

มีวิธีที่ฉันสามารถตั้งค่าป้ายกำกับสีของไฟล์เป็นสีเมื่ออยู่ใน Terminal หรือไม่?

ฉันรู้ว่าคำสั่งต่อไปนี้จะแสดงข้อมูลบางอย่างเกี่ยวกับสีในปัจจุบัน แต่ฉันไม่สามารถหาวิธีที่จะทำบางสิ่งเกี่ยวกับมัน ชอบเปลี่ยนมัน

mdls -name kMDItemFSLabel somefile.ext

เหตุผลที่ฉันต้องการทราบคือฉันต้องการทำเครื่องหมายไฟล์ทั้งหมดซ้ำในโฟลเดอร์ประเภทที่มีป้ายกำกับสี (ในกรณีของฉันเป็นสีเทา)

ฉันรู้วิธีการค้นหา:

find . -name "*.ext"

และฉันรู้วิธีที่ฉันสามารถเรียกใช้คำสั่งหลังจากนั้นสำหรับแต่ละไฟล์โดยใช้-execแต่ฉันจำเป็นต้องรู้วิธีการทำป้ายกำกับจริง ...

ฉันต้องการวิธีการแก้ปัญหาที่เกี่ยวข้องกับคำสั่งในตัวสำหรับ Mac OS X เท่านั้นดังนั้นไม่มีสิ่งอื่นจากบุคคลภายนอกเว้นแต่จะไม่มีวิธีอื่น

คำตอบ:


9

จากการตอบกลับที่นี่และในโพสต์ที่อ้างอิงฉันสร้างฟังก์ชั่นต่อไปนี้และเพิ่มลงในไฟล์ ~ / .bash_profile ของฉัน:

# ตั้งค่าสีป้าย Finder
ฉลาก(){
  ถ้า [$ # -lt 2]; แล้วก็
    echo "การใช้: ป้ายกำกับ [0-7] file1 [file2] ... "
    echo "ตั้งค่าป้าย Finder (สี) สำหรับไฟล์"
    echo "สีเริ่มต้น:"
    echo "0 ไม่มีสี"
    echo "1 ส้ม"
    echo "2 Red"
    echo "3 สีเหลือง"
    echo "4 Blue"
    echo "5 Purple"
    echo "6 Green"
    echo "7 สีเทา"
  อื่น
    osascript - "$ @" << EOF
    ในการทำงาน argv
        ตั้ง labelIndex เป็น (รายการ 1 ของ argv เป็นตัวเลข)
        ทำซ้ำกับ i จาก 2 ถึง (จำนวน argv)
          บอกแอปพลิเคชัน "Finder"
              ตั้งค่าไฟล์ File เป็น POSIX (item i ของ argv) เป็น alias
              ตั้งค่าดัชนีเลเบลของไฟล์เป็น labelIndex
          จบบอก
        จบซ้ำ
    สิ้นสุดวิ่ง
EOF
  Fi
}
>


4

วิธีการ osascript ดูเหมือนจะใช้งานไม่ได้ใน Mavericks AppleScript แต่ดูเหมือนว่าจะใช้งานได้:

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

ภายใต้แมฟเวอริกส์สิ่งนี้ดูเหมือนว่าจะรวมเลเบลของไฟล์กับไฟล์ก่อนหน้า (เนื่องจากขณะนี้พวกเขาเป็น "แท็ก") และด้วยโทเค็นแบบเดียวกันฉันคาดหวังว่าข้างต้นจะแตก แต่มันมีข้อดีของการทำงานสำหรับฉันตอนนี้และเร็วกว่า AS มาก


โอ้ฉันเป็นคำสั่งที่ค่อนข้าง
nathancahill

3

osascript -e "tell app \" Finder \ "เพื่อตั้งค่าดัชนีป้ายกำกับของไฟล์ POSIX (\" / junk.txt \ ") เป็น 1"


osascript -e "tell app \"Finder\" to set label index of POSIX file (\"/junk.txt\") to 1 จะเกิดอะไรขึ้นถ้า junk.txt เป็นจริงmy full/path/with spaces.txtและเก็บไว้ในตัวแปรที่เรียกว่า$fileName ฉันได้ลองใช้ไวยากรณ์นับไม่ถ้วนและอัญประกาศเดี่ยวอัญประกาศคู่ ... และไม่มีการทำงานใด ๆ เลย

คุณหลบหนีด้วยแบ็กสแลช:File\ with\ Spaces.txt
msanford

3

นี่คือเวอร์ชันของฉันตามสองจาก @Lauri และ @Robert คุณระบุสีโดยใช้ชื่อของสีไม่ใช่หมายเลข ชื่อสีสอดคล้องกับผลลัพธ์ของhfsdata -Lดังนั้นคุณใช้ "ไม่มี" เพื่อกำหนดสีให้กับไฟล์ บันทึกในไฟล์ที่เรียกว่า "setlabel" 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

คุณอาจต้องการแก้ไขคำตอบของคุณเพื่ออ้างอิงคำตอบอื่น ๆ โดย @names ผู้เขียนของพวกเขา "สองข้อด้านบน" อาจไร้ประโยชน์ในขณะที่ผู้ใช้สามารถสั่งซื้อโพสต์เหล่านี้แตกต่างกันหากพวกเขาต้องการ
JoshP

1

หากต้องการดูใน Finder (ฉันรู้ว่าไม่ใช่สิ่งที่คุณถาม) คุณสามารถใช้ xattr -l หรือ xattr -p com.apple.FinderInfo คุณจะได้รับธงท่ามกลางศูนย์ (1E) ซึ่งบิตที่ต่ำกว่าคือ สี .. กับสิ่งที่บุคคลที่สาม: hfsdebug (ใช้กับ sudo) เพื่อรับข้อมูลจำนวนมากซึ่งมีฉลากสีที่สามารถอ่านได้

หากต้องการเปลี่ยนด้วยส่วนที่สาม: osxutilsมีคำสั่ง setlabel


น่าเสียดายที่ osxutils เป็น PPC เท่านั้น

1

สิ่งนี้จะใช้ลำดับเดียวกันกับสีเป็น 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 ถูกเปลี่ยนเส้นทางเนื่องจากการแปลงเส้นทางสัมพัทธ์เป็นนามแฝงส่งผลให้มีคำเตือนเช่นCFURLGetFSRef ผ่าน URL นี้ซึ่งไม่มีรูปแบบใน 10.8 stdout ถูกเปลี่ยนเส้นทางเนื่องจาก osascript พิมพ์ค่าของการแสดงออกครั้งสุดท้าย


1

ฉันรักสคริปต์เหล่านี้ แต่พวกเขาไม่ได้ทำงานกับไฟล์ของฉันที่ใช้ช่องว่างในชื่อของพวกเขาจนกว่าฉันจะเปลี่ยนการตั้งค่า IFS สำหรับ bash ภายในสคริปต์ฉันยังเปลี่ยนอินพุตไฟล์เพื่อยอมรับไฟล์ข้อความที่มีรายการชื่อไฟล์:

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

ต่อไปนี้เป็นบทความสองบทความที่อธิบายวิธีการใช้ applescript ซึ่งสามารถเรียกใช้งานได้จากบรรทัดคำสั่ง

วิธีการฉลากสีชุดผ่านทางเทอร์มิหรือ applescript
และ
ไฟล์การติดแท็กที่มีสีใน os-x ค้นหาจากเชลล์สคริปต์


คุณจะเรียกสิ่งนั้นจากบรรทัดคำสั่งได้อย่างไร
Svish

ใน AppleScript Editor คุณสามารถรวบรวมและบันทึกสคริปต์เป็นแอปพลิเคชัน คุณสามารถเรียกใช้โดยระบุเส้นทาง คุณสามารถเรียกใช้บนบรรทัดของ AppleScript โดยนำหน้าด้วย "osascript" และอ้างอิงคำสั่ง Applescript การอ้างถึงอาจมีความซับซ้อนบางครั้ง ...
JRobert
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.