क्या मैं किसी कमांड-लाइन टूल से फ़ोल्डर में जोड़े गए दिनांक द्वारा आदेशित फ़ाइलों को सूचीबद्ध कर सकता हूं?


10

मुझे एक स्क्रिप्ट बनाने की ज़रूरत है जो डॉक में डिफ़ॉल्ट डाउनलोड फ़ोल्डर के रूप में उसी क्रम में फ़ाइलों को दिखाती है, जिसे पहले दिनांक जोड़ा गया था, सबसे नया। मुझे विकल्प खोजने की जरूरत नहीं है ls

इसे करने का कोई और तरीका?


इसे कहां प्रदर्शित करें ?
रॉब

कमांड लाइन! मैंने एक लाइनर लिखना शुरू कर दिया है जो ट्रिक करता है। चूंकि मेरे पास बहुत प्रतिष्ठा नहीं है, मैं अपने खुद के सवाल का जवाब नहीं दे सकता, मैं इसे बाद में करूंगा।
रामिरो अरुजो

रामिरो साइट पर आपका स्वागत है - आपको किसी भी समय अपने स्वयं के प्रश्न का उत्तर देने में सक्षम होना चाहिए - लेकिन आपके जवाब को "स्वीकार" करने के लिए आपके लिए प्रतिबंध होगा। अपनी आवश्यकताओं के अनुरूप मेरे उत्तर को संपादित करने के लिए स्वतंत्र महसूस करें या यदि आपको पसंद हो तो अपना उत्तर दें।
bmike

जवाबों:


6

सरल (तेज़) समाधान:

mdls -name kMDItemFSName -name kMDItemDateAdded -raw * | \
xargs -0 -I {} echo {} | \
sed 'N;s/\n/ /' | \
sort

1
हाँ, बहुत बेहतर :)
रमिरो अरुजो

क्या कोई यह बता सकता है कि उनमें से प्रत्येक रेखा क्या करती है? इसके अलावा, क्या यह समाधान टर्मिनल में व्यक्तिगत कमांड लाइनों (क्रमिक रूप से, एक के बाद एक), या केवल एक स्क्रिप्ट के भीतर किया जा सकता है?
ईजे माक

4

जोड़े गए दिनांक को मेटाडेटा आइटम के रूप में संग्रहीत किया जाता है kMDItemDateAddedऔर mdlsकमांड प्रत्येक फ़ाइल के लिए डेटा को एक तर्क के रूप में पारित कर देगा।

तो, जो कुछ भी मनमाना क्रम में डाउनलोड किया जाता है उसमें सभी फाइलों के लिए जोड़ी गई तारीख को डंप करने के लिए * अपने शेल द्वारा विस्तारित किया जाता है, आप कर सकते हैं:

mdls -name kMDItemDateAdded ~ / डाउनलोड / *

आपको ढूंढने और sed / awk / perl / जो कुछ भी प्रतिस्थापन के लिए इकट्ठा करना है, के कुछ संयोजन को एक साथ हैक करने की आवश्यकता होगी, lsलेकिन शायद mdfind को आपकी स्क्रिप्ट द्वारा lsउस आउटपुट को पुन: स्थापित करने और पार्स करने की बजाय कॉल किया जा सकता है ।


1
हाँ! मैंने इसे बाद में पाया और एक सुंदर एक लाइनर बनाया जिसने मुझे बहुत सारी चीजें सिखाईं :) मदद के लिए धन्यवाद
रामिरो अरुजो

2
मेरे उत्तर को संपादित करके उस एक लाइनर को चिपकाएँ - ज्ञान साझा करें!
bmike

2

खैर, हमेशा की तरह, प्रश्न लिखने के बाद मैं मेटाडाटा सामग्री के लिए फाइलों में खोदना शुरू करता हूं, और यह लिखना समाप्त कर रहा हूं:

ls -a | \
grep -v '^\.$\|^\.\.$' | \
xargs -I {} mdls -name kMDItemFSName -name kMDItemDateAdded {} | \
sed 'N;s/\n//' | grep -v '(null)' | \
awk '{print $3 " " $4 " " substr($0,index($0,$7))}' | \
sort -r

मूल रूप से यह: 1. सभी फाइलों को सूचीबद्ध करें 2. फ़िल्टर करें। और .. 3. नाम और तारीख को जोड़ा जाता है, एक के बाद एक लाइन 4। हर दो लाइनों को 1 लाइन में मर्ज करता है। दिनांक, समय और नाम को निकालता है 6. इसे उल्टा करता है (चूंकि डेटाइम अपफ्रंट है, यह इसके अनुसार होता है) दिनांक और समय)

आशा है कि यह किसी और की मदद करता है! :)

@bmike ने वास्तव में, साइट ने मुझे मेरे प्रश्न को पोस्ट करने के 8 घंटे के बाद ही मेरी प्रतिष्ठा की कमी के कारण अपने स्वयं के प्रश्न का उत्तर देने के लिए प्रतिबंध लगाया: डी


ओह, मैंने एक लाइनर को स्पष्टता के लिए कई पंक्तियों में विभाजित किया है :)
रामिरो अरुजो

1
का प्रयोग करें ls -Aबजाय -aआप की जरूरत नहीं है तो grep -vके लिए .और ..
mfilej

0

आदमी एल.एस.

 -U      Use time of file creation, instead of last modification for
         sorting (-t) or long output (-l).

1
नहीं, मुझे तिथि जोड़ी गई है, दिनांक नहीं बनाई गई है। गोदी में डिफ़ॉल्ट डाउनलोड फ़ोल्डर के समान
रामिरो अरुजो

दिनांक कैसे जोड़ी गई तिथि के अनुसार नहीं बनाई गई है?
जेसन

1
जेसन - तिथि तब बनाई गई है जब फ़ाइल बनाई गई थी, जब सफारी किसी अन्य कंप्यूटर से फ़ाइल डाउनलोड करती है, यह स्पष्ट रूप से उस डाउनलोड के लिए बनाई गई थी या डाउनलोड होने से महीनों या वर्षों पहले बनाई जा सकती थी। जहां इस डेटा ओएस एक्स पर संग्रहीत हो जाता है पर जानकारी के लिए मेरा उत्तर देखें
bmike
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.