बैश लूप में एक फ़ाइल को छोड़कर


10

निम्नलिखित स्क्रिप्ट में, मैं एक निर्देशिका को लूप में कैसे निकालूं? मैं ऐसा करना चाहता हूं क्योंकि सभी फाइलें एक ही स्तर पर मौजूद इस निर्देशिका की ओर इशारा करते हुए सहानुभूति हैं, इसलिए मैं इसे जोड़ना नहीं चाहता।


cd /var/www
for dir in */
do
        base=$(basename "$dir")
        tar -czfh "${base}.tar.gz" "$dir"
done

जवाबों:


13

आप continueइस तरह एक बयान जोड़ सकते हैं :

cd /var/www
for dir in */
do
        if [ "$dir" == "foo" ] ; then
              continue;
        fi
        base=$(basename "$dir")
        tar -czfh "${base}.tar.gz" "$dir"
done

या आप इसे findकमांड से कर सकते हैं :

find /var/www -maxdepth 1 -type d \( -name foo \) -prune -o -print -exec bash -c "tar -czfh \`basename {}\`.tar.gz {}" \;

7

extglobयदि आपको यह पहले से सक्षम नहीं है तो आपको इसके लिए सक्षम करने की आवश्यकता है ( shopt -s extglob):

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