सभी फ़ाइलों को dir में लें और प्रत्येक फ़ाइल के लिए समान पर्ल प्रक्रिया करें


1

मेरे पास dir है, जहां कई फाइलें हैं। a1, bb2, ccc3

फिलहाल मैं मैन्युअल रूप से करता हूं:

perl myperscitpt.pl a1 a1.txt
perl myperscitpt.pl bb2 bb2.txt
perl myperscitpt.pl ccc3 ccc3.txt

मैं कैसे एक linux खोल स्क्रिप्ट द्वारा कर सकता है?

जवाबों:


2
for i in *; do perl myperlscript $i ${i%.*}.txt; done 

यह regex का उपयोग करता है, निश्चित रूप से।


उत्तर में गलती है। स्क्रिप्ट को अतिरिक्त रूप से मापदंडों के साथ कहा जाएगा ls ls.txt। इसके अलावा प्रत्यय हटाने regex का उपयोग नहीं करता है यह उसी तरह का उपयोग करता है जैसे कि पथनाम विस्तार। प्रत्यय हटाने की जरूरत नहीं है। ओपी ने इसका अनुरोध नहीं किया और यह कोड को बैश पर निर्भर बनाता है। निश्चित संस्करण:for i in * ; do perl myperlscript $i $i.txt ; done
पाबौक

2

आपको छोरों की तलाश करनी होगी। यह मार्गदर्शिका शानदार है: http://www.tldp.org/LDP/abs/html/abs-guide.html#EX22

हां, हर फाइल के लिए आप एक लूप लिख सकते हैं:

for fn in *;
do
    # do something with the file names and files
    # make the output filename
    ofn=${fn}.txt
    # run the perl thingy
    perl myperscitpt.pl $fn $ofn
done

1
find /home/user/my/folder -type f -exec perl myperscitpt.pl "{}" "{}.txt" \;

यह कमांड एक डायरेक्टरी (और उपनिर्देशिका) के तहत सभी फाइलों को ढूंढेगा और आपकी पर्ल स्क्रिप्ट को निष्पादित करेगा।

find /home/user/my/folder -type f -iname "a*" -or -iname "b*" -or -iname "c*" -exec perl myperscitpt.pl "{}" "{}.txt" \;

यदि आप वर्तमान फ़ोल्डर को खोजना चाहते हैं तो आप /home/user/my/folderएक डॉट के साथ स्थानापन्न कर सकते .हैं।

{} फ़ाइल नाम (और फ़ाइल नाम) के लिए पथ है।

\; आवश्यक है जब आप कमांड के अंत में -exec का उपयोग करें

-type f फ़ाइलों का अर्थ है (निर्देशिका नहीं)

-iname "a*" -or -iname "b*" -or -iname "c*"एक या बी या सी के साथ शुरू होने वाली फ़ाइलों के लिए खोज करने का मतलब है। -inameहै केस-संवेदी , -nameकेस-संवेदी है।

यह कमांड उपनिर्देशिकाओं में भी खोज करेगा । यदि आप उपखंडों में खोज नहीं करना चाहते हैं, तो आप -maxdepthइसे सेट करें (इसे अपने कमांड में पहले तर्क के रूप में उपयोग करें):

find /home/user/my/folder -maxdepth 1 -type f -iname "a*" -or -iname "b*" -or -iname "c*" -exec perl myperscitpt.pl "{}" "{}.txt" \;

खोज बहुत सारे विकल्पों के साथ एक शक्तिशाली कमांड है, मैनुअल देखें: http://www.gnu.org/software/findutils/manual/html_mono/find.html#Finding-Files

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