उपनिर्देशिका सहित निर्देशिका में नवीनतम फ़ाइलों को कैसे खोजें?


12

मैं किसी निर्देशिका और उसके उपनिर्देशिकाओं में सभी फाइलों को सूचीबद्ध करने के लिए विंडोज में एक रास्ता खोज रहा हूं, ताकि क्रमबद्ध हो ताकि नवीनतम फाइलें शीर्ष पर हों। क्या ऐसा करने का कोई आसान तरीका है? मैं एक पर्ल स्क्रिप्ट के लिए भी सेटल होता।

जवाबों:


3

यदि आप अभी भी एक स्क्रिप्टेड समाधान में रुचि रखते हैं, तो मैंने जल्दी से एक साथ कुछ फेंक दिया है जो सभी निर्देशिकाओं से एक साथ फाइल प्रदर्शित करेगा:

#!C:/Perl/bin/perl.exe
use File::Find;

my %files = ();

sub process
{
    $files{$_} = (stat($_))[9] unless -d $_;
}

find (\&process, $ARGV[0]);

foreach my $key(sort {$files{$b} <=> $files{$a}} keys %files)
{
    print "$key\n";
}

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

उपयोग: perl find.pl <starting_directory>


धन्यवाद। मुझे लगता है कि अगर यह इस दिशा में गया तो स्टैकओवरफ्लो प्रश्न होना चाहिए था। :)
किप

1
कुछ बदलाव जो मैंने किए (किसी की भी मदद के लिए जो इस पार आने के लिए होगा): my $dir = ($#ARGV >= 0 ? $ARGV[0] : '.');ताकि यह डायरेक्ट डाइर को स्कैन करे अगर डायरेक्टरी पैरामीटर नहीं दिया गया है, और जो समय प्रिंट हुआ है उसे शामिल करने के लिए:print strftime('%Y-%m-%d %H:%M:%S', localtime((stat($key))[9])) . " $key\n";
किप

1
@ किप, माइम को संग्रहित किया जाना चाहिए $files{$key}यदि आप उस का उपयोग करना चाहते हैं strftimeजब मुद्रण के लिए दूसरी कॉल से बचने के लिए stat()। यदि आप इसे किसी अन्य प्रोग्राम में पाइप करने की योजना बना रहे हैं, तो मैंने इसे फ़ाइल नाम का पूरा पथ प्रदर्शित करने के लिए भी संशोधित किया है। आप इसे यहाँ ले सकते हैं: pastebin.ca/1797748
जॉन टी

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

7

ऐशे ही: dir /s /o:-d


1
हम्म ... काफी आदर्श नहीं है, यह अभी भी प्रत्येक निर्देशिका को व्यक्तिगत रूप से सूचीबद्ध करता है, लेकिन मैं इसके साथ काम कर सकता हूं
किप

5

यदि आपके पास साइबरविन या समान स्थापित है तो find . -type f | xargs ls -trचाल चलेगा। आप लगभग निश्चित रूप से Microsoft के शक्तियां के साथ ऐसा ही कर सकते हैं।


3

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

सब कुछ फ्रीवेयर है, एक पोर्टेबल संस्करण उपलब्ध है।


1

यदि आपको कोडिंग से कोई आपत्ति नहीं है (हालांकि यह स्टैक ओवरफ्लो क्षेत्र में सवाल उठाता है) तो C # में क्लासेस Directoryऔर Fileक्लास हैं।

GetFilesविधि एक अधिभार है कि सभी उप-निर्देशिकाओं के सभी फ़ाइल नाम वापस आ जाएगी है। फिर आप इस सूची GetLastWriteTimeको बदल सकते हैं, संशोधित तिथि / समय प्राप्त करने के लिए बुला सकते हैं। एक शब्दकोश में नाम और समय को संग्रहीत करें, समय पर छाँटें और फ़ाइल नाम प्रिंट करें।

वहाँ भी है DirectoryInfoऔर FileInfoकक्षाएं।

मुझे यह जोड़ना चाहिए था कि यह सब कार्यक्षमता Powershell के माध्यम से उपलब्ध है , इसलिए आपके पास पूर्ण IDE तक पहुंच नहीं है।


धन्यवाद। मैं एक डेवलपर हूं, हालांकि मुख्य रूप से जावा में। मैं यहाँ पूछ रहा था कि शेल विकल्प उपलब्ध होने की उम्मीद है
किप

@ किप - मुझे पता चला कि कल रात मुझे पता चला कि मुझे Powershell - Technet.microsoft.com/en-us/scriptcenter/dd742419.aspx का उल्लेख करना चाहिए - यह एक स्क्रिप्टिंग भाषा है, लेकिन आपके पास .NET टाइमटाइम तक पहुंच है।
क्रिस फेयर

1

यदि आपके पास Git Bash या Cygwin जैसी कोई चीज़ स्थापित है, तो आपको यहाँ से किसी एक उत्तर का उपयोग करने में सक्षम होना चाहिए: /programming/4561895/how-to-recursively-find-the-latest-modified -file में एक-निर्देशिका

मेरे लिए अच्छा काम करने वाला व्यक्ति है: find . -type f -printf '%TF %TT %p\n' | sort -r

आप | head -10केवल 10 सबसे हाल ही में देखने के लिए उस के अंत में भी जोड़ सकते हैं , कहते हैं।

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