कमांड find . -name '*2015*' -mmin +1440 -ls
शायद वही करेगा जो आप चाहते हैं। जानकारी के लिए नीचे देखें।
आपकी पहली आज्ञा थी -name 2015
। यह काम नहीं किया क्योंकि यह केवल उन फ़ाइलों को खोजता है जिनके नाम बिल्कुल हैं 2015
, उनमें कोई अन्य वर्ण नहीं है।
आपका दूसरा आदेश, find . -name *2015* -mtime +1 -exec ls -ltrh {} \;
कुछ कारणों से विफल हो सकता है:
1.*
खोल से अयोग्य पात्रों का विस्तार किया जाता है, फिर इन्हें पास किया जाता है find
।
यदि वर्तमान निर्देशिका में कोई भी फाइल सीधे सम्मिलित है (आप जिस समय आप उस find ...
कमांड को चलाते हैं ) जिसका नाम सम्मिलित है 2015
(और .
उसके साथ शुरू नहीं होता है ), तो शेल*2015*
उन फ़ाइल नाम की सूची में विस्तारित हो गया, फिर पास किया गया उस सूची को तर्क के रूप में find
। यह वह नहीं है जो आप चाहते हैं - इसके बजाय, आप *2015*
शाब्दिक रूप से खोजने के लिए एक तर्क के रूप में पारित करना चाहते हैं, ताकि find
, और न कि शेल, यह पता लगा सके कि कौन सी फाइलें इससे मेल खाती हैं।
उस समस्या को ठीक करने के लिए, बोली *2015*
। इसे करने के तीन सामान्य तरीके हैं:
'*2015*'
(अर्थात find . -name '*2015*' -mtime +1 -exec ls -ltrh {} \;
)
"*2015*"
(अर्थात find . -name "*2015*" -mtime +1 -exec ls -ltrh {} \;
)
\*2015\*
(अर्थात find . -name \*2015\* -mtime +1 -exec ls -ltrh {} \;
)
मैं सुझाव है कि इसे लिखने एकल उद्धरण के साथ के रूप में '*2015*'
, क्योंकि:
लेकिन इस मामले में यह वास्तव में मायने नहीं रखता है। '
और "
दोनों *
एक ही व्यवहार करते हैं और अभिव्यक्ति \
को समझना मुश्किल बनाने के लिए उद्धरण के लिए पर्याप्त जटिल नहीं है ।
2. -mtime +1
केवल दो या दो दिन पहले संशोधित फ़ाइलों का चयन करता है ।
जैसा man find
कहता है:
Numeric arguments can be specified as
+n for greater than n,
-n for less than n,
n for exactly n.
-mtime n
File's data was last modified n*24 hours ago. See the comments
for -atime to understand how rounding affects the interpretation
of file modification times.
-atime n
File was last accessed n*24 hours ago. When find figures out
how many 24-hour periods ago the file was last accessed, any
fractional part is ignored, so to match -atime +1, a file has to
have been accessed at least two days ago.
मान लीजिए कि 47 घंटे पहले किसी फ़ाइल को संशोधित किया गया था। कितने 24 घंटे की अवधि है कि, यह पता लगाने की find
दौर नीचे : यह है एक 24 घंटे की अवधि पहले। लेकिन -mtime +1
केवल उन्हीं फाइलों से मेल खाता है, जिनका संशोधन समय 24 घंटे की अवधि से पहले कड़ाई से अधिक है । इस प्रकार कल से फ़ाइलें मेल नहीं खाती हैं।
क्यों देखें -mtime +1 केवल 2 दिनों से अधिक पुरानी फ़ाइलों को लौटाता है? अधिक जानकारी के लिए, जैसा कि स्टीलड्राइवर द्वारा सुझाया गया है ।
फ़ाइलें ढूंढने के लिए अंतिम बार संशोधित किसी भी समय की तुलना में अधिक 24 घंटे पहले , मैं बजाय के रूप में यह तय करने का सुझाव 1440 मिनट पहले साथ -mmin +1440
:
find . -name '*2015*' -mmin +1440 -exec ls -ltrh {} \;
कुछ पाठक सोच रहे होंगे कि मैंने क्यों नहीं बोली {}
। कुछ लोग {}
मनुष्यों को याद दिलाने के लिए उद्धृत करते हैं कि यह ब्रेस विस्तार के लिए एक अभिव्यक्ति नहीं है । बॉर्न-शैली के गोले (जैसे बाश ) को उद्धृत करने की आवश्यकता नहीं है {}
। हो सकता है कि कुछ गैर-बॉर्न-शैली शेल विशेष रूप से इसका इलाज करते हैं; हो सकता है कि कुछ उपयोगकर्ता इसे उद्धृत करें। लेकिन यह भी एक गलत धारणा है कि किसी को कभी-कभी उद्धरण देना चाहिए {}
ताकि -exec
रिक्त स्थान के साथ फ़ाइल नाम को सही ढंग से संभाल सके। यह गलत है: के साथ {}
या '{}'
, find
एक ही तर्क मिलता है, जैसा कि शेल पास होने से पहले उद्धरण हटाता'{}'
हैfind
। इस ग़लतफ़हमी का मुकाबला करने के लिए, मैं बोली नहीं देता {}
, लेकिन यह स्टाइल की बात है - यदि आप {}
यह दस्तावेज़ करना पसंद करते हैं कि शेल कैसे व्यवहार नहीं कर रहा है {
और }
विशेष रूप से, यह ठीक है।
मैं सुझाव है कि आप भी या तो अपने को बदलने के ls
आदेश, या (के रूप में muru का सुझाव दिया है ) के साथ बदलने find
की -ls
कार्रवाई। ls -ltrh
संभवत: आप जो इरादा कर रहे हैं वह नहीं कर रहे हैं क्योंकि यह पाया गया प्रत्येक फ़ाइल के लिए अलग-अलग चलाया जाता है और इस प्रकार -t
और -r
झंडे, जो सॉर्टिंग निर्दिष्ट करते हैं, अप्रासंगिक हैं।
हालाँकि आउटपुट थोड़े अलग तरीके से तैयार किया जाएगा ls -l
, इसका उपयोग -ls
करना सरल और आसान है।
find . -name '*2015*' -mmin +1440 -ls
या यदि आप तय करते हैं कि आपको वास्तव में केवल फ़ाइल के नाम (उनके पथ, रिश्तेदार सहित .
) को सूचीबद्ध करने की आवश्यकता है , तो आप बस कोई कार्रवाई निर्दिष्ट नहीं कर सकते हैं, जिससे डिफ़ॉल्ट -print
कार्रवाई का उपयोग किया जा सकता है:
find . -name '*2015*' -mmin +1440
find
हिस्सा मेरे लिए अच्छा लग रहा है, लेकिन मैं यह भी साथ समस्या नहीं थी-exec
पैरामीटर। मुझे वह काम भी नहीं मिला। (मैं इसके माध्यम से मूल फ़ोल्डर में एक फ़ोल्डर से सभी jpg फ़ाइलों को स्थानांतरित करने की कोशिश कर रहा था - और इसे मैन्युअल रूप से कर रहा हूं ...)