मैक ओएस एक्स: टर्मिनल से फाइलों के कलर लेबल को कैसे बदलें


16

क्या कोई तरीका है जब मैं टर्मिनल में फ़ाइल के रंग लेबल को किसी रंग में सेट कर सकता हूं?

मुझे पता है कि निम्नलिखित कमांड इस बारे में कुछ जानकारी सूचीबद्ध करता है कि वर्तमान में रंग क्या है, लेकिन मैं यह पता नहीं लगा सकता कि इसके बारे में कुछ कैसे किया जाए। जैसे इसे बदलना है।

mdls -name kMDItemFSLabel somefile.ext

कारण मैं जानना चाहूंगा कि मैं एक निश्चित रंग लेबल के साथ एक निश्चित प्रकार के फ़ोल्डर में सभी फ़ाइलों को पुन: अंकित करना चाहता हूं (मेरे मामले में ग्रे)।

मुझे पता है कि कैसे करना है:

find . -name "*.ext"

और मुझे पता है कि मैं प्रत्येक फ़ाइल का उपयोग करने के बाद कमांड कैसे चला सकता हूं -exec, लेकिन मुझे यह जानना होगा कि वास्तविक लेबलिंग कैसे करें ...

मैं एक समाधान चाहता हूं जिसमें केवल मैक ओएस एक्स के लिए अंतर्निहित कमांड शामिल हैं। इसलिए अधिमानतः कोई 3 पार्टी सामान नहीं है, जब तक कि कोई अन्य तरीका न हो।

जवाबों:


9

यहाँ प्रतिक्रियाओं और संदर्भित पोस्ट के आधार पर, मैंने निम्नलिखित कार्य किया और इसे अपनी ~ / .bash_profile फ़ाइल में जोड़ा।

# खोजक लेबल रंग सेट करें
लेबल () {
  अगर [$ # -lt 2]; फिर
    गूंज "उपयोग: लेबल [0-7] file1 [file2] ..."
    गूंज "फाइलों के लिए खोजक लेबल (रंग) सेट करता है"
    गूंज "डिफ़ॉल्ट रंग:"
    इको "0 नो कलर"
    इको "1 ऑरेंज"
    इको "2 रेड"
    इको "3 येलो"
    इको "4 ब्लू"
    इको "5 पर्पल"
    इको "6 ग्रीन"
    इको "7 ग्रे"
  अन्य
    ऑसस्क्रिप्ट - "$ @" << EOF
    रन arvv पर
        लेबलइंडेक्स सेट करें (नंबर के रूप में argv का आइटम 1)
        2 से i (argv की गिनती) के साथ दोहराएं
          एप्लिकेशन "खोजक" बताएं
              उर्फ के रूप में POSIX फ़ाइल (argv का आइटम) के लिए theFile सेट करें
              लेबल के लेबल के लिए सूचकांक सूचकांक सेट करें
          अंत बताओ
        अंत दोहराना
    अंत चला
EOF
  फाई
}
>


4

ऑसस्क्रिप्ट तरीके Mavericks AppleScript में टूटे हुए लगते हैं, लेकिन यह काम करने लगता है:

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

Mavericks के तहत यह फ़ाइल लेबल को पिछले एक के साथ मर्ज करना प्रतीत होता है (जैसा कि वे अब "टैग" हैं) और उसी टोकन से मैं ऊपर किसी बिंदु पर टूटने की उम्मीद करूंगा अगर Apple इस तरह से एक्सटेंडेड एक्सटेंशन्स को रोक दे। लेकिन अब मेरे लिए काम करने और एएस की तुलना में बहुत तेज होने का फायदा है।


ओह मेरी, यह काफी आज्ञा है।
नथनचिल

3

ऑसिस्क्रिप्ट-"ऐप" "फाइंडर \" को 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
बचते हैं

3

यहाँ मेरा संस्करण @Lauri और @Robert से दो पर आधारित है। आप रंग के नाम का उपयोग करके रंग निर्दिष्ट करते हैं, संख्या नहीं। रंग के नाम के आउटपुट के अनुरूप हैं hfsdata -L, इसलिए आप फ़ाइल में कोई रंग निर्दिष्ट करने के लिए "कोई नहीं" का उपयोग करते हैं। इसे "सेटलैबेल" नामक फ़ाइल में सहेजें और करें 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

आप अपने उत्तर को उनके लेखकों के @ नामों द्वारा अन्य उत्तरों के संदर्भ में संपादित करना चाह सकते हैं। "ऊपर के दो" संभावित रूप से बेकार हैं, क्योंकि यदि कोई उपयोगकर्ता चाहें तो इन पदों को अलग-अलग तरीके से ऑर्डर कर सकता है।
जोश

1

फाइंडर में उन्हें देखने के लिए (मुझे पता है, जो आपने नहीं पूछा था) आप xattr -l, या xattr -p com.apple.FinderInfo का उपयोग कर सकते हैं, आपको जीरो (1 ई) के बीच एक झंडा मिलता है, जिसमें से निचले बिट्स कम होते हैं रंग .. तीसरे पक्ष के सामान के साथ: hfsdebug (sudo के साथ उपयोग) बहुत सारी जानकारी प्राप्त करने के लिए, जिसके बीच एक पठनीय रंग लेबल।

उन्हें तीसरे भाग के सामान के साथ बदलने के लिए: ऑक्सुटिल्स में सेटलैबेल कमांड है।


दुर्भाग्य से, osxutils केवल पीपीसी है।

1

यह खोजक के रूप में रंगों के लिए उसी क्रम का उपयोग करेगा।

#!/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। स्टैडआउट को पुनर्निर्देशित किया गया है क्योंकि ऑस्क्रिप्ट अंतिम अभिव्यक्ति के मूल्य को प्रिंट करता है।


1

मुझे इन लिपियों से प्यार है, हालांकि, वे मेरी फाइलों के लिए काम नहीं कर रहे थे, जो उनके नाम में रिक्त स्थान का उपयोग करते थे जब तक कि मैंने स्क्रिप्ट के अंदर bash के लिए IFS सेटिंग नहीं बदल दी, मैंने फ़ाइल नाम को फ़ाइल नाम की सूची के साथ स्वीकार करने के लिए फ़ाइल इनपुट को भी बदल दिया:

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

यहां दो लेखों का वर्णन किया गया है कि एप्लास्क्रिप्ट का उपयोग कैसे करें, जो बदले में कमांड लाइन से लागू किया जा सकता है।

शेल स्क्रिप्ट से ओएस-एक्स फाइंडर में रंगों के साथ टर्मिनल या एप्सस्क्रिप्ट
और
टैगिंग फ़ाइलों के माध्यम से रंग लेबल कैसे सेट करें


कमांड-लाइन से आप इसे कैसे कहेंगे?
सविश जूल 28'10

AppleScript एडिटर में, आप एक स्क्रिप्ट को एप्लिकेशन के रूप में संकलित और सहेज सकते हैं। आप इसके पथ को निर्दिष्ट करके चला सकते हैं। आप इसे "ऑसस्क्रिप्ट" के साथ और एप्सस्क्रिप्ट स्क्रिप्ट को उद्धृत करके AppleScript की लाइन पर चला सकते हैं। उद्धरण कभी-कभी जटिल हो सकता है ...
JRobert
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.