টার্মিনালের মাধ্যমে কোনও ফোল্ডার ট্যাগ করা সম্ভব?


11

টার্মিনাল কমান্ডের মাধ্যমে ম্যাভারিকসে কোনও ফাইল বা ফোল্ডার ট্যাগ করা সম্ভব?


1
হ্যাঁ তাই হয়। ট্যাগগুলি xattr ব্যবহার করে সংরক্ষণ করা / পড়া এবং com.apple.metadata: _kMDItemUserTags এ সংরক্ষণ করা হয়। আপনি কি আরও নির্দিষ্ট প্রশ্নে সম্পাদনা করতে চান (সম্ভবত একটি নির্দিষ্ট ফাইলে সহজেই "ফু" নামে একটি ট্যাগ সেট করার জন্য পাইথনটি ব্যবহার করুন) বা প্রযুক্তিগতভাবে সম্ভব হলে আপনি কি কেবল কৌতূহলী?
bmike

সম্পর্কিত প্রশ্ন এখানে
Asmus

1
@ বিমিকে ধন্যবাদ, হ্যাঁ আমি প্রোগ্রামগতভাবে সম্পাদনা করতে চাই: পি
গেডাঙ্কেননেবেল

উত্তর:


23

আপনি xattr ব্যবহার করতে পারেন। এটি ফাইল 1 থেকে ফাইল 2 এ ট্যাগগুলি অনুলিপি করে:

xattr -wx com.apple.metadata:_kMDItemUserTags "$(xattr -px com.apple.metadata:_kMDItemUserTags file1)" file2;xattr -wx com.apple.FinderInfo "$(xattr -px com.apple.FinderInfo file1)" file2

ট্যাগগুলি একটি একক অ্যারের স্ট্রিং হিসাবে সম্পত্তি তালিকায় সংরক্ষণ করা হয়:

$ xattr -p com.apple.metadata:_kMDItemUserTags file3|xxd -r -p|plutil -convert xml1 - -o -
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
    <string>Red
6</string>
    <string>new tag</string>
    <string>Orange
7</string>
    <string>Yellow
5</string>
    <string>Green
2</string>
    <string>Blue
4</string>
    <string>Purple
3</string>
    <string>Gray
1</string>
</array>
</plist>

যদি com.apple- ফিন্ডারআইএনফো-তে কে কলার পতাকাটি সেট না করা থাকে, ফাইন্ডার রংগুলির জন্য চেনাশোনাগুলি প্রদর্শন করে না। যদি কে কলর পতাকাটি কমলাতে সেট করা থাকে এবং ফাইলটিতে লাল ট্যাগ থাকে তবে ফাইন্ডার লাল এবং কমলা উভয় বৃত্ত দেখায় shows আপনি অ্যাপলস্ক্রিপ্টের সাহায্যে কে-কালার পতাকা সেট করতে পারেন:

xattr -w com.apple.metadata:_kMDItemUserTags '("Red\n6","new tag")' ~/desktop/file4;osascript -e 'on run {a}' -e 'tell app "Finder" to set label index of (POSIX file a as alias) to item 1 of {2, 1, 3, 6, 4, 5, 7}' -e end ~/desktop/file4

xattr -p com.apple.FinderInfo file|head -n1|cut -c28-29কে-কালার পতাকার জন্য ব্যবহৃত বিটের মান মুদ্রণ করে। লাল হল সি, কমলা হল ই, হলুদ এ, সবুজ ৪, নীল 8, মজেন্টা is, এবং ধূসর।

সম্পাদনা করুন: আপনি ট্যাগ ব্যবহার করতে পারেন :

tag -l file # list
tag -a tag1 file # add
tag -s red,blue file # set
tag -r \* file # remove all tags
tag -f green # find all files with the green tag
tag -f \* # find all files with tags
tag -m red * # match (print files in * that have the red tag)

ট্যাগ brew install tagবা দিয়ে ইনস্টল করা যেতে পারে sudo port install tag

$ tag -h
tag - A tool for manipulating and querying file tags.
  usage:
    tag -a | --add <tags> <file>...     Add tags to file
    tag -r | --remove <tags> <file>...  Remove tags from file
    tag -s | --set <tags> <file>...     Set tags on file
    tag -m | --match <tags> <file>...   Display files with matching tags
    tag -l | --list <file>...           List the tags on file
    tag -f | --find <tags>              Find all files with tags
  <tags> is a comma-separated list of tag names; use * to match/find any tag.
  additional options:
        -v | --version      Display version
        -h | --help         Display this help
        -n | --name         Turn on filename display in output (default)
        -N | --no-name      Turn off filename display in output (list)
        -t | --tags         Turn on tags display in output (find, match)
        -T | --no-tags      Turn off tags display in output (list)
        -g | --garrulous    Display tags each on own line (list, find, match)
        -G | --no-garrulous Display tags comma-separated after filename (default)
        -H | --home         Find tagged files only in user home directory
        -L | --local        Find tagged files only in home + local filesystems (default)
        -R | --network      Find tagged files in home + local + network filesystems
        -0 | --nul          Terminate lines with NUL (\0) for use with xargs -0

6

খাঁটি বাশ কমান্ডের মাধ্যমে ট্যাগগুলি হেরফের করা সম্ভব। তৃতীয় পক্ষের "ট্যাগ" ব্যবহারের দরকার নেই।

এই কমান্ডটি কোনও ফাইলের ($ src) সমস্ত ট্যাগ তালিকাভুক্ত করে:

xattr -px com.apple.metadata:_kMDItemUserTags "$src" | \
    xxd -r -p - - | plutil -convert json -o - - | sed 's/[][]//g' | tr ',' '\n'

এবং এখানে আপনি কীভাবে কোনও ফাইল ($ src) এ একটি ট্যাগ ($ newtag) যুক্ত করতে পারেন:

xattr -wx com.apple.metadata:_kMDItemUserTags \
    "$(xattr -px com.apple.metadata:_kMDItemUserTags "$src" | \
    xxd -r -p - - | plutil -convert json -o - - | sed 's/[][]//g' | tr ',' '\n' | \
    (cat -; echo \"$newtag\") | sort -u | grep . | tr '\n' ',' | sed 's/,$//' | \
    sed 's/\(.*\)/[\1]/' | plutil -convert binary1 -o - - | xxd -p - -)" "$src"

এখানে একটি ছোট শেল স্ক্রিপ্ট যা একটি "ট্যাগ" ফাংশন রফতানি করে। ব্যবহার:

tags <file>
Lists all tags of a file

tags -add <tag> <file>
Adds tag to a file

ফাংশন সহজেই সরানো সমর্থন সমর্থন প্রসারিত হতে পারে।

tags() {
    # tags system explained: http://arstechnica.com/apple/2013/10/os-x-10-9/9/
    local src=$1
    local action="get"

    if [[ $src == "-add" ]]; then
        src=$3
        local newtag=$2
        local action="add"
    fi

    # hex -> bin -> json -> lines
    local hexToLines="xxd -r -p - - | plutil -convert json -o - - | sed 's/[][]//g' | tr ',' '\n'"

    # lines -> json -> bin -> hex
    local linesToHex="tr '\n' ',' | echo [\$(sed 's/,$//')] | plutil -convert binary1 -o - - | xxd -p - -"

    local gettags="xattr -px com.apple.metadata:_kMDItemUserTags \"$src\" 2> /dev/null | $hexToLines | sed 's/.*Property List error.*//'"

    if [[ $action == "get" ]]; then
        sh -c "$gettags"
    else
        local add="(cat -; echo \\\"$newtag\\\") | sort -u"
        local write="xattr -wx com.apple.metadata:_kMDItemUserTags \"\$($gettags | $add | grep . | $linesToHex)\" \"$src\""

        sh -c "$write"
    fi
}
export -f tags

হায়, এগুলি লম্বা লাইন! আমি একটি মোড়ানো সম্পাদনার পরামর্শ দিয়েছি। যদিও আমি মনে করি এগুলি ছোট শেল স্ক্রিপ্ট হিসাবে আরও ভাল করা যেতে পারে।
জিগগ

আপনার xattr -wxকমান্ড ব্যর্থ হয় যখন ফাইলটিতে ইতিমধ্যে কোনও ট্যাগ নেই। আমি কীভাবে এড়াতে পারি?
ব্যবহারকারী 393232000

সর্বশেষতম ওএস এক্স (এল ক্যাপ 10.11.4) এ কিছু সমস্যা রয়েছে বলে মনে হচ্ছে। xattr -px …আমার যে কোনও ফোল্ডারে ট্যাগগুলি প্রদর্শন করতে আপনি যে আদেশটি দিয়েছেন তা চালনা করে নিম্নলিখিত আউটপুট দেয়: "language:Objective-C\n2"(নিউলাইন) "platform:iOS\n4"সত্যিই, আপনি যদি আপনার মাঝারিভাবে জটিল শেল কোডটি ব্যাশ ফাংশনে গুটিয়ে রাখতে চলেছেন, আপনি কেবল ট্যাগের প্রয়াসকেই নকল করছেন যা সম্প্রদায়কে সু-রক্ষণাবেক্ষণ করার সুবিধা রয়েছে।
স্লিপ ডি থম্পসন

@ স্লিপডি.টমসন, কীভাবে কোনও সঙ্কলিত সরঞ্জামটির "প্রচেষ্টা সদৃশ" এর সাথে বাশ ফাংশনটিতে শেল কোডটি মোছা যাচ্ছে ? ... আপনাকে এই জন্য কোনও প্রো-কন-বিশ্লেষণ দিতে হবে না এবং ' ট্যাগ ', আপনি যা পছন্দ করেন তা চয়ন করুন। এই সমাধানটির বিবৃতিটি হ'ল কাঙ্ক্ষিত কার্যকারিতা অর্জনের জন্য আপনার তৃতীয় পক্ষের সরঞ্জামের প্রয়োজন হবে না
মার্টন সুরি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.