आदेश डिफ़ॉल्ट सॉर्टिंग क्रम खोजें


30

लिनक्स खोज कमांड द्वारा दी गई प्रविष्टियों के लिए डिफ़ॉल्ट सॉर्टिंग क्रम क्या है?

उदाहरण के लिए, यदि मैं जारी करता हूं

find . -type f -name '*mp3' 

और आउटपुट कई उप-फ़ोल्डरों में कई फ़ाइलों के होते हैं, डिफ़ॉल्ट क्रम क्या है जिसमें निर्देशिकाएं सूचीबद्ध हैं? उसी समय, क्या छँटाई क्रम है जिसमें एक व्यक्तिगत निर्देशिका के भीतर फाइलें सूचीबद्ध हैं?

कभी-कभी यह लौटता है:

./B/01.mp3
./A/01.mp3
./A/04.mp3
./A/02.mp3

देखें कि पहली बार निर्देशिका बी की सामग्री को कैसे सूचीबद्ध किया गया है, फिर निर्देशिका ए की निर्देशिका ए के भीतर एक ही समय में, फाइलों को एक अजीब क्रम में सूचीबद्ध किया गया है।


अनुभव से ऐसा लगता है कि प्रति इंस्टॉल, यानी। यदि आपके पास दो मशीनों पर फ़ाइलों का समान सेट है, तो यह हमेशा एक मशीन पर एक ऑर्डर लौटाएगा, और दूसरे पर पूरी तरह से अलग होगा। मैंने सोचा है कि क्यों पहले, +1
जेम्स एल

1
मेरी कार में एक एफएम ट्रांसमीटर है और यह हमेशा मेरे फ्लैश कार्ड से अजीब क्रम में गाने बजाता है। मैंने इसका कभी पता नहीं लगाया, लेकिन मैंने पहचाना कि यह ठीक उसी क्रम में था जिसमें उपरोक्त कमांड ने अपना आउटपुट लौटा दिया था
नस्को

BTW: BSD खोज में -sवर्णानुक्रम में सॉर्ट आउटपुट के लिए पैरामीटर है।
लैपो

जवाबों:


19

findऑर्डर ट्री में डायरेक्टरी ट्री को ट्रैवर्सिंग किया जाएगा ताकि डायरेक्टरी एंट्रीज़ में स्टोर हो सकें। यह (ज्यादातर) एक ही मशीन पर रन से चलाने के लिए सुसंगत होगा, और अनिवार्य रूप से "फ़ाइल / निर्देशिका निर्माण क्रम" होगा यदि कोई हटाए नहीं गए हैं।

हालाँकि, कुछ फ़ाइल सिस्टम निर्देशिका प्रविष्टियों को संघनन संचालन के भाग के रूप में फिर से क्रम में लाएंगे या जब प्रवेश के आकार को विस्तारित करने की आवश्यकता होगी, तो समय के साथ "कच्चा" क्रम बदलने का एक छोटा मौका हमेशा रहेगा। यदि आप एक सुसंगत आदेश चाहते हैं, तो आउटपुट को एक अतिरिक्त छंटनी चरण के माध्यम से खिलाएं।


आपके विस्तृत उत्तर के लिए धन्यवाद! इसलिए, अगर मेरे एफएम ट्रांसमीटर (मेरी मौजूदा टिप्पणी देखें) क्रम में पटरियों की भूमिका निभाता है तो कमांड उन्हें सूचीबद्ध करेगी, मैं इस बात पर नियंत्रण नहीं कर पा रहा हूं कि मैं उन्हें किस क्रम में खेलना चाहूंगा।
नास्को

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

इस तरह की संगति के उपयोगी अनुप्रयोगों में से एक धीमी गति से प्रगति का अनुमान है जो पहले फाइलों की क्रमबद्ध सूची प्राप्त करने के लिए find /path/ -exec ...बहुत तेजी find /path/से चलती है ।
एंड्री

6

आपको किसी विशेष आउटपुट ऑर्डर पर निर्भर नहीं होना चाहिए findऔर इसके बजाय विशेष रूप से ऑर्डर को sortनियंत्रित करने के लिए अन्य साधनों का उपयोग करना चाहिए ।


2

मैं 1984/1991 से क्रमशः UNIX / Linux में काम कर रहा था और मुझे सिखाया गया पहला कमांड मिला। लिनक्स / जीएनयू ने वर्तमान खोज कमांड में बहुत सारी चीजें डाल दी हैं ताकि इसके साथ खेल सकें।

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

  1. यदि आप -ls का उपयोग करते हैं और फ़ाइल नाम से सॉर्ट करना चाहते हैं तो 11 वां फ़ील्ड फ़ाइल नाम है, ताकि आप निम्न कार्य कर सकें। सॉर्ट -k विकल्प के रूप में अच्छी तरह से सॉर्ट करने के लिए कई फ़ील्ड ले सकते हैं।

    find / path -ls | क्रमांक -11

  2. यदि आप बारी-बारी से या नीचे उतरते क्रम में महीन अनाज नियंत्रण ortort चाहते हैं, तो -प्रिंट "" विकल्प का उपयोग करें। अधिक विस्तार के लिए मैनुअल देखें, लेकिन निम्नलिखित एक उदाहरण है जो भिन्नात्मक सेकंड के साथ प्रिंट करेगा, इसलिए यह बहुत सटीक है।

परीक्षा तिथि / समय: 2016-09-17 + 12: 09: 57.9013929800

find /path -printf "%T+ %p\n" | sort -n # Ascending

find /path -printf "%T+ %p\n" | sort -nr # Descending

दिनांक / समय स्ट्रिंग में वर्णों के बिना ऐसा करने का एक और तरीका है।

परीक्षा तिथि / समय: 20160917120013.8101685040

find /path -printf "%AY%Am%Ad%AH%AM%AS %p\n" | sort -n
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.