फ़ाइलों को पुनरावर्ती रूप से कैसे सूचीबद्ध करें और उन्हें संशोधन समय के आधार पर क्रमित करें?


13

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

मैं सामान्य रूप से उपयोग ls -lhtcकरता हूं, लेकिन यह सभी फ़ाइलों को पुनरावर्ती नहीं पाता है। मैं लिनक्स और मैक का उपयोग कर रहा हूं।

ls -l मैक ओएस एक्स पर दे सकते हैं

-rw-r--r--    1 fsr  user      1928 Mar  1  2011 foo.c
-rwx------    1 fsr  user      3509 Feb 25 14:34 bar.c

जहाँ दिनांक भाग सुसंगत या संरेखित नहीं होता है, इसलिए समाधान को इसे ध्यान में रखना होता है।

आंशिक समाधान

stat -f "%m%t%Sm %N" ./* | sort -rn | head -3 | cut -f2-

काम करता है, लेकिन पुनरावृत्ति नहीं।


मैं यह मानने जा रहा हूं कि आप लिनक्स पर हैं, लेकिन आपको अपने ओएस को स्पष्ट रूप से प्रश्न में या अधिमानतः एक टैग के रूप में निर्दिष्ट करना चाहिए।
ईबीग्रीन

जवाबों:


2

यहाँ stat@ johnshen64 के रूप में सुझाए गए तरीके का उपयोग किया गया है

find . -type f -exec stat -f "%m%t%Sm %N" '{}' \; | sort -rn | head -20 | cut -f2-

find "$PWD" -type f -exec stat -f $'%m\t%N' '{}' \; | sort -rn | cut -f2-OS X पर फ़ाइलों के बस निरपेक्ष पथों को प्रिंट करेगा
Lri

आप किस संस्करण का statउपयोग कर रहे हैं? आपके ऊपर का प्रारूप मेरे लिए काम नहीं आया। मुझे निम्नलिखित का उपयोग करना था find . -type f -exec stat --printf "%Y\t%y %N\n" '{}' \; | sort -rn | cut -f2-:। यह stat (GNU coreutils) 8.23
बजे

12

उपयोग findकी -printfऔर तरह एक उचित दिनांक स्वरूप पर:

find -type f -printf '%T+\t%p\n' | sort -n

यह प्रक्रिया कांटे को कम करना चाहिए और इस प्रकार सबसे तेज होना चाहिए।

यदि आपको भिन्नात्मक दूसरा भाग पसंद नहीं है, तो उदाहरण (जो कि फ़ाइल सिस्टम में अक्सर लागू नहीं होता है):

find -type f -printf '%T+\t%p\n' | sed 's/\.[[:digit:]]\{10\}//' | sort -n
find -type f -printf '%T+\t%p\n' | cut --complement -c 20-30 | sort -n

EDIT:find मैक पर मानक नहीं है -printf। लेकिन जीएनयू को मैक पर स्थापित करना मुश्किल नहीं है (मैक / लिनक्स संगतता के बारे में अधिक जानकारी के लिए यह लिंक भी देखें xargs) और ।


0

find .सभी फ़ाइलों को प्राप्त करने में सक्षम होना चाहिए। कुछ इस तरह:

find . -exec ls -dl '{}' \; | sort -k 6,7

आपको अपनी आवश्यकताओं के लिए इसे ट्यून करने की आवश्यकता है।


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

क्या यह वास्तव में सही ढंग से काम करता है जब तारीखें कभी-कभी मैक पर वर्ष के हिस्से को याद करती हैं?
क़्वाज़ेक्स

आप सही हैं, हाल की फ़ाइलों के लिए दिनांक प्रदर्शन चीजों को गड़बड़ कर देगा। आपको उस स्थिति में सटीक स्वरूपित तिथि प्राप्त करने के बजाय स्टेट का उपयोग करने की आवश्यकता है। मेरी फाइलें बहुत पुरानी हैं इसलिए कमांड ने ठीक काम किया, यही कारण है कि मैंने ट्यून क्लॉज जोड़ दिया है :-)
johnshen64

@ johnshen64: lsलिनक्स पर एक --time-formatविकल्प है जिसे आप यह सुनिश्चित करने के लिए उपयोग कर सकते हैं कि हाल ही में और पुरानी फ़ाइल तिथियों को एक ही प्रारूप में दिखाया गया है।
RedGrittyBrick

आह धन्यवाद, आप सही हैं, बस इसका इस्तेमाल नहीं किया है। यह स्टेटम का उपयोग करने की तुलना में बहुत सरल है। यह कहा जाता है - समय-शैली मुझे लगता है।
जॉनशेन ६४

0

यूनिक्स स्टैक एक्सचेंज साइट पर इसी तरह के सवाल का जवाब देने से मुझे मदद मिली क्योंकि मैं zsh का उपयोग कर रहा था:

पुनरावर्ती रूप से संशोधन तिथि द्वारा क्रमबद्ध फ़ाइलों की सूची कैसे दें (कोई स्टेटमेंट उपलब्ध नहीं है!)


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