2010-12-23 18 views
13

यह लिनक्स में आसान लगता है, लेकिन मैं एक निर्देशिका के भीतर * .pdf फ़ाइलों के नाम और इसकी उपनिर्देशिकाओं को आउटपुट फ़ाइल में प्रिंट करने की कोशिश कर रहा हूं। मेरे पास मेरी विंडोज़ मशीन पर पर्ल स्थापित है। ऐसा करने का एक आसान तरीका क्या है?कमांड लाइन प्रिंट फ़ाइल नाम आउटपुट फ़ाइल

धन्यवाद, जेक

उत्तर

29

ज्यादा लिनक्स की तुलना में अलग।

dir *.pdf > fileyouwant.txt 

आप केवल फ़ाइल नाम चाहते हैं, आपको लगता है कि

dir/b *.pdf > fileyouwant.txt 

साथ आप भी उपनिर्देशिका चाहते हैं,

dir/s/b *.pdf > fileyouwant.txt 

कर सकते हैं आपको लगता है कि निर्देशिका के साथ शुरू करने के लिए नहीं कर रहे हैं

dir/s/b C:\Path\*.pdf > fileyouwant.txt 
+0

इस उपनिर्देशिका में फ़ाइलों को नहीं मिलेगा। –

+0

क्या 'dir' उप-निर्देशिकाओं में रिकर्सिव खोज करता है? –

+1

डीआईआर/एस/बी करता है। आपको पहले लक्ष्य शीर्ष निर्देशिका में सीडी करना होगा। – ysth

0

पर्ल का उपयोग करके आप लगभग निश्चित रूप से File::Find कोर मॉड्यूल का उपयोग करना चाहिए।

0

File::Glob मॉड्यूल देखें।

विशेष रूप से:

#!/usr/bin/perl 
use File::Glob ':glob'; # Override glob built-in.       
print join("\n",glob("*.pdf")); 
+0

उपनिर्देशिका नहीं करेगा – ysth

+0

@ysth: मेरा बुरा, लेकिन यह अभी भी किसी के लिए उपयोगी हो सकता है, इसलिए मैं इसे छोड़ दूंगा। – robert

1
use strict; 
use warnings; 
use File::Find; 

my $dirname = shift or die "Usage: $0 dirname >outputfile"; 

File::Find::find(sub { 
    print $File::Find::name, "\n" if $File::Find::name =~ /\.pdf\z/ 
}, $dirname); 
+0

यह काम करता है, लेकिन क्या मैं निर्देशिका नाम के लिए मुझे संकेत देने के बाद आउटपुट को फ़ाइल में प्रिंट कर सकता हूं? – Jake

+0

@ जेक: इसे कमांड लाइन पैरामीटर के रूप में निर्देशिका नाम लेने के लिए बदल दिया गया ताकि आउटपुट को आसानी से फ़ाइल में भेजा जा सके – ysth

1

File::Find::Rule अक्सर File::Find से उपयोग करने के लिए अच्छे है।

use File::Find::Rule; 

my $rule = File::Find::Rule->file()->name('*.pdf')->start('C:/Path/'); 
while (defined (my $pdf = $rule->match)) { 
    print "$pdf\n"; 
} 

या बस

use File::Find::Rule; 

print "$_\n" for File::Find::Rule->file()->name('*.pdf')->in('C:/Path/'); 
संबंधित मुद्दे