क्या अपडेट एक्सब को मैन्युअल रूप से चलाने के बिना ओएस एक्स पर फ़ाइलों का पता लगाने के लिए अपडेट कमांड का उपयोग करने का एक तरीका है?


3

मैं पता लगाने के लिए एक उपनाम का उपयोग करने पर विचार कर रहा हूं, क्योंकि मुझे मैक पर अक्सर अपडेटेड रन करने के लिए वास्तव में असुविधाजनक लगता है।

क्या आपके पास इसके लिए कोई आइडिया या वर्कअराउंड है?


1
क्या यह होना चाहिए locate? क्या आपने देखा है mdfind?
माटूस ज़्लॉज़क

क्या आप अधिक विस्तार कर सकते हैं? योसेमाइट और फाइंडर का उपयोग करते हुए, फ़ाइलों और स्थानों को लगभग तुरंत अपडेट किया जाता है, इसलिए मेरे पास आपके प्रश्न के संदर्भ का कोई फ्रेम नहीं है।
एलन

1
@ आलन से man locate->The database is recomputed periodically (usually weekly or daily), and contains the path- names of all files which are publicly accessible.
मट्टूस ज़्लॉसेक

जवाबों:


5

यदि आप अधिक बार अद्यतन करना चाहते हैं, तो आपको /System/Library/LaunchDaemons/com.apple.locate.plistफ़ाइल को संशोधित करना होगा ।

विशेष रूप से, आप <key>StartCalendarInterval</key>अनुभाग ढूंढना चाहते हैं और इसे अपने विनिर्देशों में बदलना चाहते हैं । डिफ़ॉल्ट रूप से, प्रत्येक शनिवार (रविवार को 0 से घूरने वाला पहला दिन) में सुबह 3:15 बजे अपडेट करने के लिए कॉन्फ़िगर किया गया है।

<key>StartCalendarInterval</key>
        <dict>
                <key>Hour</key>
                <integer>3</integer>
                <key>Minute</key>
                <integer>15</integer>
                <key>Weekday</key>
                <integer>6</integer>
        </dict>

यह क्रोन की तरह काम करता है, इसलिए आप चाहें तो एक तारांकन निर्दिष्ट कर सकते हैं, उदाहरण के लिए इसे हर दिन चलाने के लिए। बस बदलने 6के लिए और *और यह 3:15 हर दिन पर चलेंगे।

इसे करने का एक आसान तरीका यदि आप इसे एक निर्धारित अंतराल पर चलाना चाहते हैं, उदाहरण के लिए, हर 3 घंटे में, आप StartInterval <integer>निर्देश का उपयोग कर सकते हैं । इसलिए, आपके कार्य को हर तीन घंटे चलाने के लिए, निम्न निर्देश को फाइल में डालें:

<key StartInterval</key>
   <integer>108000</integer>

पूर्णांक सेकंड की संख्या है। तो, एक मिनट में 60 सेकंड, एक घंटे में 60 मिनट और आगे।

StartCalendarIntervalनिर्देश निकालना मत भूलना ।

अंतिम, लेकिन निश्चित रूप से कम से कम नहीं ... इसे संशोधित करने से पहले अपनी .plist फ़ाइल की बैकअप प्रतिलिपि बनाएँ। इस तरह, यदि आप चीजों को पूरा करते हैं, तो आपके पास वापस गिरने के लिए एक अच्छा कॉन्फ़िगरेशन है।

नोट: इन परिवर्तनों को OS X El Capitan के तहत काम करने के लिए, आपको OS X के सिस्टम इंटीग्रिटी प्रोटेक्शन (SIP) को अक्षम करना होगा। आप केवल csrutilसिस्टम रिकवरी मोड का उपयोग करके ऐसा कर सकते हैं ।

सिस्टम रिकवरी में बूट मैक Command+ धारण करके R

टर्मिनल का उपयोग करते हुए, दर्ज करें csrutil disable

आपको निम्नलिखित देखना चाहिए: Successfully disabled System Integrity Protection. Please restart machine for changes to take effect.

रीबूट।

locate अब आपके शेड्यूल के अनुसार अपडेट होना चाहिए।

अस्वीकरण: यह अनुशंसित प्रक्रिया नहीं है। हालांकि यह उत्तर तकनीकी रूप से प्रश्न को संबोधित करता है, लेकिन यह "अपडेट शेड्यूल को बदलने के लिए क्यों आवश्यक है?" सवाल।


3
SIP के बारे में क्या System/Library/LaunchDaemons?
माटूस ज़्लॉज़क

1
हालांकि ओपी ने यह नहीं बताया कि वह ओएस एक्स के किस संस्करण में चल रहा है, फिर भी माटुस्ज़ ज़्लोसक ने एक वैध बिंदु लाया। तो आप SIP के बारे में जानकारी जोड़ना और उसे सक्षम / सक्षम करना चाह सकते हैं।
user3439894

1
यह सच है ... मैं सिस्टम इंटीग्रिटी प्रोटेक्शन के बारे में भूल गया। मैं अपना जवाब अपडेट करूंगा।
एलन

आपको वास्तव में इसे अपडेट करने की आवश्यकता नहीं है - कम से कम अब, शायद तब जब आप पहली बार जवाब देते हैं - सिस्टम डायरेक्टरी में। आप /Libraryइसके बजाय कर सकते हैं । विवरण के लिए मेरा उत्तर देखें। इसका मतलब है कि आपको एसआईपी को निष्क्रिय नहीं करना है और यह अच्छी बात है।
प्रिएफ्टन

क्या इसे चलाने का कोई तरीका है ताकि यह वास्तव में सिंक हो। मतलब अगर मैं डिलीट करता हूं तो चीजें हट जाती हैं। अगर जोड़ भी दें, तो चीजें इंडेक्स में जुड़ जाती हैं?
मोमोमो जूल

2

आपको इसके लिए SIP को अक्षम करने की आवश्यकता नहीं है; आप इसके बजाय /Libraryनिर्देशिका का उपयोग कर सकते हैं । मुझे यही समस्या थी क्योंकि मेरे पास मेरा मैकबुक प्रो रात में नहीं है और मैं अन्य प्रणालियों के लिए भी उपयोग किया जाता हूं जहां यह दैनिक क्रोनजॉब है। हालाँकि, इसे कंप्यूटर पर बूट करने के बाद या एक बार डिमांड करने के लिए इसे सेट करना संभव है: और न ही आपको SIP को अक्षम करने की आवश्यकता है (इसके बावजूद कि कोई अन्य उत्तर क्या है)। मैंने इस तरह से इसे किया; अगर ऐसा कुछ है जिसे बेहतर बनाया जा सकता है तो मैं इसे सुनकर ज्यादा खुश हूं और निश्चित रूप से अपने थके हुए राज्य में मैं कुछ गलत लिख सकता हूं या एक महत्वपूर्ण कदम या बिंदु भी भूल सकता हूं। मैं अपने ध्यान में लाई गई किसी भी चीज को ठीक करूंगा।

मानक फ़ाइल जो ऐसा करती है कि Apple स्थापित है, /System/Library/LaunchDaemons/com.apple.locate.plistलेकिन आप अपना स्वयं का इंस्टॉल कर सकते हैं /Library/LaunchDaemons। मैंने जो भी किया है, मैंने एक डिफ़ॉल्ट निर्देशिका में पहले Apple की प्रतिलिपि बनाई, कुछ संशोधन किए और फिर इसे दूसरी निर्देशिका में स्थानांतरित कर दिया: फिर मैंने सिस्टम को अपडेट किया (नीचे देखें) ताकि यह स्टार्ट अप पर चलता रहे (और मुझे विश्वास है कि कब आप इसे तब और वहीं लोड करते हैं)। ऐसा लगता है कि फ़ाइल के नाम के लिए कुछ फॉर्म का 'मानक' है, लेकिन मैंने अपने सिस्टम का नाम लिया और नाम के हिस्से के रूप में इसका इस्तेमाल किया। यहां मैं इसके बजाय अपने हैंडल का उपयोग करूंगा:

उपयोगकर्ता फ़ाइल उदाहरण: com.pryftan.locate.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"    "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.pryftan.locate</string>
<key>RunAtLoad</key>
<true/>
<key>LaunchOnlyOnce</key>
<true/>
<key>ProgramArguments</key>
<array>
    <string>/usr/libexec/locate.updatedb</string>
</array>
<key>LowPriorityIO</key>
<true/>
<key>Nice</key>
<integer>5</integer>
<key>KeepAlive</key>
<dict>
    <key>PathState</key>
    <dict>
        <key>/var/db/locate.database</key>
        <false/>
    </dict>
</dict>
<key>AbandonProcessGroup</key>
<true/>
</dict>
</plist>  

फ़ाइल स्थापित करना (जहाँ '$' कमांड प्रॉम्प्ट है):

$ sudo cp com.pryftan.locate.plist /Library/LaunchDaemons
$ sudo launchctl load -w /Library/LaunchDaemons/com.pryftan.locate.plist

अतिरिक्त नोट्स

निरीक्षण करें कि फ़ाइल का नाम ( .plistहिस्सा घटा ) फ़ाइल में ही है; जो भी आप फाइल को नाम देते हैं, उसे फाइल में भी अपडेट किया जाना चाहिए।

फ़ाइल को स्थापित करने और इसे लोड करने के बाद सिस्टम को तुरंत /usr/libexec/locate.updatedbकमांड शुरू करना चाहिए । यह कुछ अस्थायी फ़ाइलों के लिए / tmp का उपयोग करता है और उसके बाद निश्चित रूप से यह उन फ़ाइलों को हटा देता है। फिर आप देखेंगे कि क्या आप डेटाबेस फ़ाइल को देखते हैं जिसे यह अपडेट किया गया है (या संशोधित)।

नोट करें कि -wऊपर दिए गए आदेश का विकल्प कड़ाई से आवश्यक नहीं है: यह केवल तभी है जब फ़ाइल में एक 'अक्षम' कुंजी है, लेकिन जब से मैंने पहली बार उस विकल्प के साथ कमांड के आह्वान को देखा, मैंने उस कुंजी को हटाने के बाद भी इसे वहां रखा था।

यदि आप डेटाबेस को मैन्युअल रूप से अपडेट करना चाहते हैं, तो आप कमांड को सीधे चला सकते हैं (या - तो यह एक परीक्षण से कुछ समय पहले प्रकट होता है - आप ऊपर दिए गए समान लॉंचल लोड कमांड का उपयोग करके पुनः लोड कर सकते हैं):

$ sudo /usr/libexec/locate.updatedb

ओह और एक और जवाब के लिए एक टिप्पणी में मैंने उल्लेख किया कि यह वास्तव में उपयोगकर्ता निर्देशिका कैसे दिखाता है। वास्तव में यह सोचकर कि यह अनुमतियों के साथ सबसे अधिक संभावना है; निश्चित रूप से लिनक्स में ऐसा ही है। यह निश्चित रूप से समझ में आता है; यह कमांड की सीमा नहीं है, बल्कि एक सुरक्षा और गोपनीयता तंत्र है जो ओएस का ही हिस्सा है। यह कहना है कि यद्यपि डेटाबेस में सभी फाइलें हैं जो उपयोगकर्ता उन फ़ाइलों को नहीं देख सकता है जिन्हें देखने की अनुमति (निर्देशिका) नहीं है।

एक और बात: मेरे पास फ़ाइल के साथ स्वरूपण के साथ एक प्रारंभिक समस्या थी, इसलिए यदि कोई त्रुटि है तो कृपया मुझे बताएं और मैं इसे ठीक करने के बारे में देखूंगा (जब मैं संदेशों की जांच करता हूं - मेरे पास अभी बहुत कुछ चल रहा है) । यदि कोई त्रुटि हो तो वही होता है। मैं किसी भी मामले में जानता हूं कि मेरे पास क्या काम है जब तक कि सब कुछ समझाया नहीं जाता है - और जब तक मैंने समझाया (और चिपकाया गया) अच्छी तरह से यह वही होना चाहिए जो आपको चाहिए: यदि आप चाहते हैं कि यह हर बार अपडेट हो जाए जगाना। यदि आप ऐसा नहीं कर सकते हैं जैसा कि एक अन्य उत्तर केवल कहता है कि आप फ़ाइल को उस निर्देशिका में रख सकते हैं जिसे मैंने सिस्टम फ़ाइल को संशोधित करने के बजाय नोट किया था।


क्या इसे चलाने का कोई तरीका है ताकि यह वास्तव में सिंक हो। मतलब अगर मैं डिलीट करता हूं तो चीजें हट जाती हैं। अगर जोड़ भी दें, तो चीजें इंडेक्स में जुड़ जाती हैं?
मोमोमो जूल

@momo देरी के बारे में क्षमा करें। मेरे पास बहुत कुछ है। क्या आप यह कहना चाह रहे हैं कि यदि इसके बाद भी आप किसी फ़ाइल को हटा दें या एक नई फ़ाइल या निर्देशिका बना लें, तो उसे डेटाबेस में रखा जाएगा? नहीं यह सीधे संभव नहीं है। यह बहुत बार फ़ाइल परिवर्तन और डेटाबेस को अपडेट करने के लिए फ़ाइल सिस्टम (सिस्टम) को लगातार मतदान कर रहा होगा। यह वह नहीं है जो आप चाहते हैं। कहा जा रहा है कि यदि आप इसे मैन्युअल रूप से अपडेट करना चाहते हैं, तो आप वह कर सकते हैं जो मैंने उत्तर में दिया है:sudo /usr/libexec/locate.updatedb
प्रिएफ्टन

@ मैमो मैंने एक वैकल्पिक सेवा देने का विचार किया है जो हर एक्स घंटे या फिर लंबे समय तक अपडेट होती है। वह संभवतः आपके निकटतम हो सकता है। उदाहरण के लिए, आप इसे हर घंटे अपडेट कर सकते हैं। क्या यह पर्याप्त है?
प्रीफटन

@Pryflan मुझे पता चला कि mdfind ऐसा करता है ... मुझे लगता है कि यह स्पॉटलाइट इंडेक्स का उपयोग करता है जो कि पता लगाने के बराबर हो सकता है
Momomo

@mono यह वैसे भी है। हालांकि यह अधिक संसाधनों (स्पष्ट रूप से) का उपयोग करता है। यह वास्तव में एक अलग बात है (कम से कम स्पॉटलाइट है - शायद mdfind भी लेकिन मुझे निश्चित रूप से पता नहीं है) क्योंकि पता केवल एक डेटाबेस है जो डेटाबेस के अंतिम बार उत्पन्न होने पर फ़ाइलों के स्थानों को संग्रहीत करता है। लेकिन अगर mdfind आपके लिए बेहतर काम करता है (और हाँ afaik यह स्पॉटलाइट का उपयोग करता है) तो यह बहुत अच्छा है। टिप्पणी के लिए धन्यवाद। चीयर्स।
०४ बजे प्राइफ्टन

1

हमेशा उस डेटाबेस का पता लगाएँ जो या तो पुराना है, समय-समय पर अद्यतन किया गया है या डिफ़ॉल्ट रूप से पहले स्थान पर नहीं बनाया गया है।

आप इसे एक आदेश के साथ पुन: उत्पन्न करने के लिए साप्ताहिक कार्य को लोड कर सकते हैं :

sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist

ओएस एक्स पर, आप mdfindस्पॉटलाइट डेटाबेस का उपयोग करते हुए बेहतर उपयोग करेंगे और इसे लगातार अपडेट करने और इंडेक्स को वास्तविक समय अपडेट प्रदान करने के लिए डिज़ाइन किया गया है।

mdfindजब कोई अन्य प्रक्रिया आपके खोज मानदंडों से मेल खाती है , तो यह लाइव क्वेरीज़ तेज़ी से परिणाम दिखाती हैं - परिणाम लगभग तुरंत आ जाएगा।

mdfindइसके बजाय उपयोग करने के लिए अपने उपनाम को बदलने से locateआप फ़ाइल सिस्टम को क्रॉल करने के लिए locateऔर findइसके उपयोग की कमांड के डिज़ाइन सीमाओं के आसपास काम कर सकते हैं ।


1
mdfind अभी भी मेरे अनुभव में कुछ छिपी हुई और सिस्टम फ़ाइलों को याद नहीं करता है, तब भी जब आप इसे परिणामों में शामिल करने के लिए अत्याचारी तर्क देते हैं।
calum_b

@calum_b यह सबसे अधिक संभावना है कि कमांड के बजाय केवल एक अनुमति समस्या है।
प्रीफटन

ज़रुरी नहीं; डिफ़ॉल्ट रूप से डिटेक्ट डीबी को macOS पर बिल्कुल भी नहीं बनाया जाता है, और जब आप इसे बनाते हैं, तो यह तब तक फिर से अपडेट नहीं होता है जब तक कि आप लॉन्चक्टल कमांड जारी नहीं करते हैं। और फिर यह केवल डिफ़ॉल्ट रूप से सप्ताह में एक बार अपडेट करता है। Apple.stackexchange.com/a/14842/2841
calum_b

@calum_b सही है, वाक्य रचना गैर मानक स्थानों खोज करने के लिए / usr याद करने के लिए तो मैं नियमित रूप से उसे ढूंढने की है दर्दनाक है जैसे
bmike

1
मुझे यह भी इंगित करना चाहिए कि आप कर सकते हैं - यदि आप एक ही पैरामीटर का उपयोग करने जा रहे हैं अर्थात फ़ाइल या शेड्यूल को संशोधित नहीं कर रहे हैं - बस कमांड को सीधे चलाएं। किसी भी मामले में दिए गए आदेश की तुलना में कम। यह नहीं कह रहा है कि यह काम नहीं करता है, हालांकि यह टाइप करने के लिए अधिक है। ओह और यह पता लगाने या खोजने के आदेशों की एक डिजाइन सीमा नहीं है। आउट ऑफ़ डेट डेटाबेस शेड्यूलिंग के कारण होता है न कि कमांड के द्वारा। और के लिए के रूप में खोजने के लिए यह बेहद शक्तिशाली यदि आप जानते हैं कि यह कैसे उपयोग करने के लिए है। आप यह नहीं चाहते हैं कि सभी उपयोगकर्ताओं की फाइलें या तो
जासूसी

0

locateडेटाबेस डिफ़ॉल्ट रूप से केवल साप्ताहिक अपडेट किया गया है। अपने शेड्यूल को बदलने के लिए SIP को अक्षम करने की आवश्यकता है, जैसा कि पहले ही समझाया जा चुका है, जिसका अर्थ है कि आपकी सुरक्षा के लिए वहां लगाए गए सुरक्षा तंत्र को अक्षम करना। सिफारिश नहीं की गई। इसके अलावा, locateकेवल "सार्वजनिक" फ़ाइलों को खोजने के लिए लगता है - इसलिए, आपके घर निर्देशिका के तहत फाइलें नहीं।

mdfindबल्कि केवल उन चीजों को खोजेगा जो एक स्पॉटलाइट खोज पाता है। उदाहरण के लिए, यह फ़ाइल बंडलों के अंदर फ़ाइलें याद आती है। और यह असुविधाजनक, अभेद्य और बेकार के बीच कहीं है अगर आप केवल फ़ाइल नाम के आधार पर ढूंढना चाहते हैं।

अंतिम, लेकिन क्लासिक, विकल्प findटर्मिनल में कमांड का उपयोग करना है । इसके पास बहुत सारे विकल्प हैं, इसलिए बेहतर जांच करें man find। लेकिन मूल, पता लगाने की तरह उपयोग सरल है find <root directory for search> -iname <filename_with_wildcards>:। यह शायद धीमा होगा (यह इस बात पर निर्भर करता है कि फाइलसिस्टम ट्री का हिस्सा कितना बड़ा है, जहां आप खोज कर रहे हैं), लेकिन यह आपको फाइलसिस्टम की वर्तमान स्थिति दिखाता है, जैसा कि वर्तमान उपयोगकर्ता द्वारा देखा गया है। तो, इसे sudo के साथ चलाएं और आप सिस्टम की सभी फाइलों को खोज लेंगे।

और अगर आप टर्मिनल स्तर पर जाने के बिना खोजना चाहते हैं, तो आप Devon Techonologies द्वारा फ्रीवेयर EasyFind की कोशिश कर सकते हैं । अच्छा काम करता है।


मुझे पता है कि आपकी पोस्ट कुछ साल पुरानी है, लेकिन कम से कम Mojave में वास्तव में घर निर्देशिकाओं में फ़ाइलें दिखाती हैं। मुझे पूरा यकीन है कि यह सफारी में भी किया था; यह एक कमांड है जिसका उपयोग मैं विभिन्न यूनियनों में करता हूं और जब मुझे मेरा मैकबुक प्रो 2018 में मिला, तो मुझे यकीन है कि मैंने इसका इस्तेमाल किया है और होम निर्देशिकाओं में फाइलें देखी हैं (जो मैं टाइप / होम करना चाहता हूं और रोकना चाहता हूं!) और मुझे यह मार्च में मिला। Mojave को अद्यतन करने से पहले इतने लंबे समय तक।
पीरफतन

क्या इसे चलाने का कोई तरीका है ताकि यह वास्तव में सिंक हो। मतलब अगर मैं डिलीट करता हूं तो चीजें हट जाती हैं। अगर जोड़ भी दें, तो चीजें इंडेक्स में जुड़ जाती हैं? मुझे सिप की परवाह नहीं है।
मोमोमो जूल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.