2010-02-09 15 views
16

यहाँ के तहत उन लोगों को छोड़कर सभी फाइलों पर पुनरावर्ती एक कमांड को चलाने के लिए कैसे है मैं कैसे सभी फाइलों पर पुनरावर्ती dos2unix चलाएँ:.svn निर्देशिका

find -exec dos2unix {} \; 

क्या कर मैं इसे के अंतर्गत फ़ाइलें छोड़ बनाने के लिए बदलने की जरूरत है एसएसवीएन/निर्देशिका?

उत्तर

21

वास्तविक परीक्षण किया समाधान है:

$ find . -type f \! -path \*/\.svn/\* -exec dos2unix {} \; 
+0

धन्यवाद, मेरे लिए ठीक काम किया। –

-1

बैश में

for fic in **/*; dos2unix $fic 

या यहां तक ​​कि zsh में बेहतर

for fic in **/*(.); dos2unix $fic 
+1

यह कैसे छोड़ '.svn /' निर्देशिका है? –

+0

यदि dotglob बंद है, तो यह छिपी हुई फ़ाइलों को छोड़ देगा। लेकिन अन्य छिपी हुई फाइलें भी छोड़ी जाएंगी, जो मुझे लगता है कि ओपी क्या चाहता है। – ghostdog74

+0

ओउप्स, क्षमा करें! {*,। *} (एन) में रूट के लिए ; करें [[$ root = .svn]] && जारी रखें; $ रूट/**/* (।) में फिक के लिए; dos2unix $ fic करो; किया ; काम करता है लेकिन खोज संस्करण अब बेहतर है ... – yogsototh

1

बस एक अतिरिक्त टिप की पेशकश: बजाय खोज के -exec विकल्प का उपयोग कर जब से गुजर रही प्रदर्शन में वृद्धि होगी की xargs के माध्यम से परिणाम पाइप एक बड़ी निर्देशिका संरचना अगर फ़िल्टरिंग प्रोग्राम एकाधिक तर्क स्वीकार करता है, क्योंकि इससे फोर्क() की संख्या कम हो जाएगी, इसलिए:

खोजें> का चयन करता है xargs dos2unix

एक चेतावनी: किसी भी फ़ाइल नाम में व्हाइटस्पेस शामिल होने पर xargs के माध्यम से पाइपिंग असफल हो जाएगी।

+2

' ढूंढें ... -प्रिंट 0 | xargs -0 ... 'रिक्त स्थान के साथ फ़ाइल नाम संभालता है। –

-1
find . -path ./.svn -prune -o -print0 | xargs -0 -i echo dos2unix "{}" "{}" 

अगर आप बैश 4,0

shopt -s globstar 
shopt -s dotglob 
for file in /path/** 
do 
    case "$file" in 
    */.svn*)continue;; 
    esac 
    echo dos2unix $file $file 
done 
+0

यह कोई भी काम नहीं करता प्रतीत होता है। –

+0

बदलना -पथ ./.svn to -path '* /। Svn' इसे ठीक करना चाहिए। – Juris

+0

'-i' बहिष्कृत है, इसके बजाय' -I {} 'का उपयोग करें। इसके अलावा, क्यों दो '" {} "'? –

2

यहाँ एक सामान्य स्क्रिप्ट है जिस पर आप अंतिम पंक्ति के रूप में आवश्यक बदल सकते हैं। मैं अपने findrepo स्क्रिप्ट से तकनीक लिया है:

repodirs=".git .svn CVS .hg .bzr _darcs" 
for dir in $repodirs; do 
    repo_ign="$repo_ign${repo_ign+" -o "}-name $dir" 
done 

find \(-type d -a \($repo_ign \) \) -prune -o \ 
    \(-type f -print0 \) | 
xargs -r0 \ 
dos2unix 
संबंधित मुद्दे