ম্যাক ওএস এক্স 10.7 সিংহটিতে কীভাবে "তারিখ যুক্ত" মেটাডেটা সেট করবেন


22

ম্যাক ওএস এক্স 10.7-এর সন্ধানকারী সিংহ ফাইল মেটাডেটার একটি নতুন টুকরা দেখায়, "তারিখ যুক্ত," যা কোনও ফোল্ডারে কোনও আইটেম যুক্ত হওয়ার তারিখটি অনুসরণ করে। 10.7 এ আপগ্রেড করার পরে, আমার ~/Downloadsফোল্ডারের আইটেমগুলির মধ্যে কোনওটিরই "তারিখ যুক্ত" মান নেই। "তারিখ সংশোধিত" তারিখের সাথে মেলে আমি সমস্ত খালি "তারিখ যুক্ত" মানগুলি সেট করতে চাই, তবে "তারিখ যুক্ত হওয়া" বৈশিষ্ট্যটি একটি নির্দিষ্ট মানকে কীভাবে সেট করা যায় তা আমি বুঝতে পারি না।

আমার প্রথম অনুমানটি এটি ছিল:

xattr -w com.apple.metadata:kMDItemDateAdded "2012-02-19 16:34:47 +0000" myfile

তবে এটি কাজ করে বলে মনে হচ্ছে না (যদিও এটি কোনও ত্রুটির খবর দেয় না)।


আপনি কি কোনও সমাধান খুঁজে পেয়েছেন?
এরটস্প্পা

1
আমি এটি চেষ্টা করার সময় গ্রহণযোগ্য উত্তর কাজ করেছিল (এটি যতটা উন্মাদ)।
জন

উত্তর:


7

ঠিক আছে, এখানে নতুন পদ্ধতির। সতর্কতা: সিংহটিতে আমার আপগ্রেড করা সিস্টেম নেই (আমার কম্পিউটার সিংহটি ইনস্টল করে এসেছে) তাই আমি এটি পরীক্ষা করতে পারছি না। অনির্ধারিত কোড; এই কোড চেষ্টা করার আগে ব্যাক আপ!

আমার আগের উত্তরটি ডকটিতে ডাউনলোডগুলি স্ট্যাকের দ্বারা ব্যবহৃত বাছাই আদেশের ভিত্তিতে ছিল। ফাইন্ডারে তারিখ যুক্ত ক্ষেত্রটি স্পটলাইট তথ্যের উপর ভিত্তি করে প্রদর্শিত হচ্ছে, যা হ্যাক করা কঠিন। এটি অ্যাপলস্ক্রিপ্টের মাধ্যমে অ্যাক্সেসযোগ্য নয়। তবে, মনে হয় এটি একদম কার্যকর নয়।

  1. অটোমেটরে একটি নতুন ওয়ার্কফ্লো তৈরি করুন।

  2. "ফাইন্ডার আইটেমগুলির জন্য জিজ্ঞাসা করুন" ক্রিয়া যুক্ত করে ফাইন্ডার থেকে ফাইল বা ফোল্ডারগুলি গ্রহণ করার জন্য কর্মপ্রবাহ সেট করুন।

  3. কর্মপ্রবাহকে "অ্যাপলস্ক্রিপ্ট চালান" ক্রিয়াটি যুক্ত করে একটি অ্যাপলস্ক্রিপ্ট চালান।

এই অ্যাপলস্ক্রিপ্টটি ব্যবহার করুন:

on run {input, parameters}
    do shell script "sudo /usr/sbin/systemsetup -setusingnetworktime Off" with administrator privileges
    tell application "Finder"
        repeat with x in input
            set myfile to POSIX path of x
            set nm to name of x
            set d to modification date of x
            set yr to (character 3 of (year of d as string)) & (character 4 of (year of d as string))
            set mth to (month of d as number) as string
            if length of mth is 1 then set mth to "0" & mth
            set dy to day of d as string
            if length of dy is 1 then set dy to "0" & dy
            set h to hours of d as string
            if length of h is 1 then set h to "0" & h
            set m to minutes of d as string
            if length of m is 1 then set m to "0" & m
            set s to seconds of d as string
            if length of s is 1 then set s to "0" & s
            set dt to mth & ":" & dy & ":" & yr as string
            set tm to h & ":" & m & ":" & s as string
            do shell script "sudo /usr/sbin/systemsetup -setdate '" & dt & "'" with administrator privileges
            do shell script "sudo /usr/sbin/systemsetup -settime '" & tm & "'" with administrator privileges
            do shell script "mv \"" & myfile & "\" /var/tmp/clobber"
            do shell script "mv /var/tmp/clobber \"" & myfile & "\""
        end repeat
    end tell
    do shell script "sudo /usr/sbin/systemsetup -setusingnetworktime On" with administrator privileges
    return input
end run

যে ফাইলগুলির মধ্যে ইতিমধ্যে একটি তারিখ যুক্ত নেই সেগুলি নির্বাচন করুন (ফাইন্ডারে যুক্ত তারিখ অনুসারে বাছাই করুন, তারপরে একটি তারিখ যুক্ত ছাড়া তালিকার অংশটি নির্বাচন করুন) এবং এই পরিষেবাটি চালান।

অটোমেটারে কর্মপ্রবাহের স্ক্রিনশট


2
এটা ভয়াবহ ... একটি ভাল উপায়ে, সম্ভবত?
জন

1
ঠিক আছে, এটি অবশ্যই একটি হ্যাক। তবে এটি প্রদর্শিত হচ্ছে যে স্পটলাইট থেকে নির্দিষ্ট মেটাডেটার টুকরোটি গণনা করা হয়েছে এবং অন্ধকার রহস্য হিসাবে পরিচিত হিসাবে হ্যাক না করে /.Spotlight-V100এটি এটি যেমনটি পায় ততই ভাল হতে পারে। কিন্তু আমি চাই ভালবাসেন একটি পরিষ্কার উত্তর দেখতে।
ড্যানিয়েল

আমি এই স্ক্রিপ্ট থেকে একটি অদ্ভুত ত্রুটি পেয়েছি? sh: -c লাইন 0: matching "মিলে যাওয়ার সময় অপ্রত্যাশিত EOF
এরোটস্প্পা

@ এরটস্প্পা এটি এখনই সংশোধন করে আপডেট করা উচিত।
ড্যানিয়েল

অ্যাপলস্ক্রিপ্ট $তার নামে থাকা একটি ফাইল প্রক্রিয়া করার সময় একটি ত্রুটি নিয়ে থেমেছিল , তবে আমি অস্থায়ীভাবে সেই ফাইলটির নাম পরিবর্তন করে এটিকে ঘিরে কাজ করেছি। AppleScript এই ধরণের ফাইলগুলিকে হ্যান্ডেল করতে, আমার অনুসন্ধানের সূচিত করে যে আপনি প্রতিস্থাপন করতে পারে myfileসঙ্গে quoted form of myfile, কিন্তু আমি পরীক্ষিত না করেছেন। যদি কেউ এটি চেষ্টা করে myfileতবে ভেরিয়েবলটি সেট এবং নামকরণ করার সময় উদ্ধৃতিটি করা আরও পরিষ্কার হতে পারে quotedFilePath
ররি ও'কেনে

7

আমি যখন xattr -lআমার ডাউনলোড ফোল্ডারে আইটেমগুলি চালিত করি , তখন আমি এমন একটি ক্ষেত্র পাই যা দেখে মনে হয়:

com.apple.metadata:kMDItemDownloadedDate:
00000000  62 70 6C 69 73 74 30 30 A1 01 33 41 B4 83 4D BF  |bplist00..3A..M.|
00000010  4C 4F E3 08 0A 00 00 00 00 00 00 01 01 00 00 00  |LO..............|
00000020  00 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00  |................|
00000030  00 00 00 00 13                                   |.....|
00000035

এটি বাইনারি প্লিস্ট। আমি যখন এই বাইটগুলির সাথে একটি ফাইল তৈরি করতে হেক্সফিনেন্ড ব্যবহার করি (হ্যাঁ, আমি ম্যানুয়ালি সেগুলিতে প্রবেশ করেছি; অতীতে থেকে আমার অ্যাপল-তে কোনও ম্যাগাজিনের বাইরে এসেম্বলারের কোড প্রবেশ করার মতো] বিস্ফোরণ ঘটায়, তারপরে এটি একটি .plist ফাইল হিসাবে সংরক্ষণ করুন, আমি খুললাম টেক্সটরঙ্গলারে ফাইলটি পেয়েছে এবং নিম্নলিখিত কমম্পিল্ড এক্সএমএল পেয়েছে:

<?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>
    <date>2011-11-28T05:03:59Z</date>
</array>
</plist>

এটি বলেছিল, অ্যাপল মনে হয় সংকলিত এক্সএমএলে তারিখগুলি সঞ্চয় করে, সরল পাঠ্যটি মনে হচ্ছে কাজ করে।

অন্য কথায়, আপনি যদি স্ট্রিং আকারে ফাইলটির পরিবর্তিত তারিখটি পেতে পারেন তবে আপনি xattr -w com.apple.metadata:kMDItemDownloadedDate "2012-02-19 16:34:47 +0000" file"ডাউনলোড করা তারিখ" পরিবর্তন করতে কমান্ডটি চালাতে পারেন , এটি প্রদর্শিত ক্ষেত্র হিসাবে প্রদর্শিত হবে যা আসল তারিখটি যুক্ত নয়।

অবশেষে আপনি (অব্যক্ত) kMDItemDateAddedক্ষেত্রটি যুক্ত করার সময় কোনও ত্রুটি পাননি কারণ আমি এই নিবন্ধটিতে শিখেছি , xattrআপনি যা চান, ব্যবহৃত বা অব্যবহৃত যা খুশি খুশি সেট করবেন।

এটাই উত্তরের মূল বিষয়। আমি প্রতিটি ফাইলের পরিবর্তিত তারিখ পাওয়ার জন্য একটি অ্যাপলস্ক্রিপ্ট লেখার জন্য কাজ করব, kMDItemDownloadedDateসেট করা আছে কিনা তা পরীক্ষা করে দেখুন , এবং যদি তা না হয় তবে কেএমডিআইটিএমডাউনলোডডেটটি পরিবর্তিত তারিখে সেট করুন, তবে আমি উত্তরটির মূলটি পোস্ট করতে চেয়েছিলাম।


1
আপনার ডাউনলোড ফোল্ডারে ফাইলগুলিতে এমডিএলএস চালান এবং আপনি কেএমডিআইটিমেটেট অ্যাডেড মানগুলি দেখতে পাবেন। এটি ফাইন্ডারের তালিকার ভিউতে "তারিখ যুক্ত হওয়া" কলামটি দেখায়।
জন

ঘটনাক্রমে, আপনি যদি হেক্সফিয়েন্ড এবং টেক্সটরঙ্গলারের মাধ্যমে না গিয়ে কেএমডিআইটিএমডাউনলোডডেটকে প্লাস্ট তথ্য হিসাবে দেখাতে চান তবে চেষ্টা করুন xattr -p com.apple.metadata:kMDItemDownloadedDate FILENAME_HERE | xxd -r -p | plutil -convert xml1 - -o -। এক্সএক্সডি বাইনারি প্লিস্ট ডেটাতে রূপান্তরিত করে, তারপরে plutilএক্সএমএল প্লিস্টে রূপান্তর করে এটি মুদ্রণ করে।
ম্যাট গিবসন

ঠিক আছে, আমি আমার মাথার উপরে আছি, আমি বলতে ভয় পাচ্ছি। kMDItemDateAdded তালিকাভুক্ত নয় xattr -lএবং কেএমডিআইটিএমডাউনলোডডেটটি তালিকাভুক্ত নয় mdls। কুরিউসার এবং কুরিউসার ডিরেক্টরিটির জন্য একটি xattr এ তারিখ যুক্ত ক্ষেত্রও সংরক্ষণ করা হয় না । এই মেটাটাটা কোথায় থাকে?
ড্যানিয়েল

1
যেহেতু xattrঅজগর স্ক্রিপ্ট, তাই আমি অনুমান করি যে এই স্ক্রিপ্টটির চারপাশে ঝাঁকুনি দেওয়া উচিত এবং হেক্সের পরিবর্তে বাইনারি-তে গুণাবলীর বাইনারি ডেটা কীভাবে পাওয়া যায় তা নির্ধারণ করা উচিত, যাতে আপনি এটি সরাসরিভাবে খাওয়াতে পারেন plutil
হ্যারাল্ড হানচে-ওলসেন

4

আমি ফাইন্ডারে প্রদর্শিত "তারিখ যুক্ত" সেট করার কোনও উপায় খুঁজে পাচ্ছি না।

আমি বিশ্বাস করি যে আপনি স্পটলাইট সূচকের kMDItemDateAddedমেটাডেটা বৈশিষ্ট্য থেকে এটি পুনরুদ্ধার করেছেন correct যাইহোক, স্পটলাইট কোনও উপায়ে এটিকে নিজেই আবিষ্কার করে।

আমি একটি বর্ধিত ফাইল অ্যাট্রিবিউট নামক স্থাপনের চেষ্টা করেছি com.apple.metadata:kMDItemDateAddedবিন্যাস দ্বারা ব্যবহৃত সহ বিভিন্ন ফরম্যাটের এক একটি তারিখের মানে, kMDItemDateAddedএবং তাদের কেউ স্পটলাইট সূচক দ্বারা কুড়ান হয়েছে, অর্থাত কোন কি মান দ্বারা প্রদর্শিত ব্যাপার xattr, মান দ্বারা দেখানো mdlsপরিবর্তন করা হয়নি।

আমি অনুমান করব , যদিও আমি নিশ্চিতভাবে জানি না যে স্পটলাইট কেবল কোনও নির্দিষ্ট স্থানে কোনও ফাইলকে সূচী করে প্রথমবারের উপর ভিত্তি করে এই তারিখটি সেট করে এবং এটি তৈরি করার জন্য অন্য কোনও মেটাডেটা পরীক্ষা করে না। যদি আপনি mvফাইলগুলি ডাউনলোডের বাইরে চলে গিয়ে থাকেন এবং ফিরে যান, তারিখটি আপডেট হয়ে যাওয়ার পরে আপডেট হয় তবে ফাইল মেটাডেটার কোনওটিই প্রভাবিত বলে মনে হয় না, কেবল স্পটলাইট মেটাডেটা।

সুতরাং, সংক্ষেপে, আমি মনে করি তারিখ সংযোজন কেবল /.স্পটলাইট- ভি 100 এর ক্রিপ্টিক সাহসিকতার মধ্যে কোথাও সঞ্চিত রয়েছে এবং যদি কেউ স্পটলাইটকে একটি স্বেচ্ছাসেবী মানতে একটি মেটাডেটা এন্ট্রি আপডেট করার উপায় না জানায়, আমি ' এটি করার একটি উপায় দেখুন না।


স্পটলাইট! সাবাশ.
ড্যানিয়েল

4

সমাধানের জন্য ড্যানিয়েল লসনকে ধন্যবাদ! এটি এখনও দু'বছর পরেও ভালভাবে কাজ করে।

আমার দুটি সংযোজন রয়েছে:

1) দয়া করে নোট করুন যে গৃহীত উত্তরের কোডটিতে একটি ছোট ত্রুটি রয়েছে।

এই লাইন:

do shell script "/usr/sbin/systemsetup -settime ''" & tm & "'"

... একটি অতিরিক্ত অপ্রস্তুত রয়েছে, একটি "অপ্রত্যাশিত EOF" ত্রুটি ট্রিগার করে। এটি পড়া উচিত:

do shell script "/usr/sbin/systemsetup -settime '" & tm & "'"

২) আরও গুরুত্বপূর্ণ, ম্যাভারিকস ১০.৯.২ থেকে শুরু করে সিস্টেমসআপে প্রশাসকের অধিকার প্রয়োজন। সুতরাং শেল স্ক্রিপ্টে প্রতিটি কল এই সূত্রটি অনুসরণ করা উচিত:

do shell script "sudo /usr/sbin/systemsetup -setusingnetworktime Off" with administrator privileges

অ্যাপলস্ক্রিপ্টের সম্পূর্ণ পরিবর্তিত সংস্করণ এখানে 10.9.3 এ কাজ করার জন্য নিশ্চিত করেছেন:

on run {input, parameters}
    do shell script "sudo /usr/sbin/systemsetup -setusingnetworktime Off" with administrator privileges

    tell application "Finder"
        repeat with x in input
            set myfile to POSIX path of x
            set nm to name of x

            set d to modification date of x
            set yr to (character 3 of (year of d as string)) & (character 4 of (year of d as string))
            set mth to (month of d as number) as string
            if length of mth is 1 then set mth to "0" & mth
            set dy to day of d as string
            if length of dy is 1 then set dy to "0" & dy
            set h to hours of d as string
            if length of h is 1 then set h to "0" & h
            set m to minutes of d as string
            if length of m is 1 then set m to "0" & m
            set s to seconds of d as string
            if length of s is 1 then set s to "0" & s

            set dt to mth & ":" & dy & ":" & yr as string
            set tm to h & ":" & m & ":" & s as string
            do shell script "sudo /usr/sbin/systemsetup -setdate '" & dt & "'" with administrator privileges
            do shell script "sudo /usr/sbin/systemsetup -settime '" & tm & "'" with administrator privileges

            do shell script "mv \"" & myfile & "\" /var/tmp/clobber"
            do shell script "mv /var/tmp/clobber \"" & myfile & "\""
        end repeat
    end tell

    do shell script "sudo /usr/sbin/systemsetup -setusingnetworktime On" with administrator privileges

    return input
end run

1
ভিন্ন জিজ্ঞাসা করতে স্বাগতম! অন্য কারও উত্তর সম্পাদনা করার জন্য একটি উত্তর লেখার পরিবর্তে, সম্পাদনাটি ক্লিক করুন বা আপনি যে পোস্টটি উন্নতি করতে চান তার নীচে এই উত্তর বোতামটি উন্নত করুন
grg

এই পরিবর্তনগুলি অন্তর্ভুক্ত করার জন্য ড্যানিয়েলের উত্তর সম্পাদনা করা হয়েছে
ররি ও'কেনে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.