पुनरावर्ती के बिना एलएस कैसे करें


19

मैं एक निर्देशिका में एक पैटर्न के साथ कुछ फाइलें ls करने की कोशिश कर रहा हूं। मैं केवल पहले स्तर को पुनरावर्ती नहीं स्कैन करना चाहता हूं।

मेरी स्क्रिप्ट:

for i in $(ls $INCOMINGDIR/*$BUSSINESSDATE*)
do
  echo $i;
done

ऊपर के आदेश स्कैन पुनरावर्ती। यह केवल प्रथम स्तर निर्देशिका को स्कैन करने के लिए कैसे कर सकता है?


printf %s\\n "$INCOMINGDIR/"*"$BUSINESSDATE"*
15

जवाबों:


39

पार्स मत करोls । इसके अलावा ALL_CAPS_VARS का उपयोग न करें

for i in "$incoming_dir"/*"$business_date"*; do

पारस्परिक रूप से, lsएक -dविकल्प है जो उपनिर्देशिकाओं में उतरने से रोकता है:

ls -d $INCOMINGDIR/*$BUSSINESSDATE*

इस जानकारी के लिए धन्यवाद, मैं अब सिर्फ sysadmins को परेशान करने के लिए नाम में नई लाइनों के साथ फाइलें बनाना शुरू कर रहा हूं।
पेटा

यही कारण है कि स्मार्ट sysadmin / प्रोग्रामर का उपयोग करता है "${i}"। आप कभी नहीं जान सकते कि क्या हो सकता है i
रिकी बीम

@Petah: या कोई बुरा इरादे वाला व्यक्ति नाम की एक फ़ाइल बना सकता है my_file.doc[newline]another_persons_file.docऔर उम्मीद कर सकता है कि कुछ स्क्रिप्ट "rm" करने की कोशिश कर सकते हैं जो इसे 2 फाइलनाम के रूप में देखता है ... ग्लेन की लिंक को अवश्य पढ़ें (mywiki.wooledge.org पर, सभी को पढ़ना चाहिए पूरे faq, और यह भी नुकसान पेज)
ओलिवियर दुलैक

1
ठंडा। मैं -d विकल्प नहीं जानता था!
dokaspar

महान! यह सरल चीजों के लिए भी काम करता है। इस तरह के रूप में सभी डॉट-उपसर्ग फ़ाइलें सूची:ls -d .*
Wassadamo

8

कोई कारण नहीं है कि इस आदेश को पुनरावर्ती होना चाहिए। लेकिन अगर $INCOMINGDIR/*$BUSSINESSDATE*किसी निर्देशिका से मेल खाता है तो इस निर्देशिका की सामग्री को निर्देशिका के बजाय दिखाया गया है। लेकिन इस स्तर से आगे कोई पुनरावृत्ति नहीं होगी।

उस प्रभाव से बचने के लिए इस कमांड का उपयोग करें:

ls -d "$INCOMINGDIR/"*"$BUSSINESSDATE"*

for ... inlsआउटपुट के साथ कमांड जोखिम भरा है।

सामान्य तौर पर findएक बेहतर समाधान लगता है या

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