2013-06-03 9 views
5

Tüm gizli dosyaları yok saymak istiyorum, ancak özellikle .git ve .svn olanlar dosyaları ararken (ve daha sonra değiştirirken), pek çok çevrimiçi öğreticide açıklanan bu gizli dosyaları hariç tutmanın en basit yolunun işe yaramadığını buldunuz. İşte. Ayrıca, gizli dosyaları da yazdıracaktır.Neden bulunuyor? -not -name ". *" gizli dosyaları hariç değil mi?

ben yazmaya çalışıyorum komut şey ama bir şey ile başlayan tüm dosyaları ve dizinleri maç yok -not -name ".*" olduğunu

replace() { 
    if [ -n "$3" ]; then expr="-name \"$3\""; fi 
    find . -type f \($expr -not -name ".*" \) -exec echo sed -i \'s/$1/$2/g\' {} \; 
    unset expr 
} 
+0

'Bul. -not-isim ". *" 'bana çalışır. – fedorqui

+0

'Bul'u kullanın. -not -name '. *', kabuk genişlemesini önlemek için. – Rubens

+0

tam olarak, gizli dizinlerde hala (gizli olmayan) dosyaları bulur. – user1273684

cevap

9

olduğunu "" - ama onları aramadan çıkarmaz, böylece gizli dizinlerin içinden eşleşmeler alırsınız. yolları -prune kullanmak erik için yani:

find $PWD -name ".*" -prune -o -print 

("" Ben arama aksi başlangıç ​​da kısaltılabilir, çünkü $PWD kullanmak ve hiçbir çıkış olacağını)

+0

Teşekkür ederim, ama hala biraz kayboldum - neden $ PWD -name 'buluyor. *' -prune -o -name '* .c' -type f -print' çalışma ama '$ PWD bulmak - name '. *' -prune -o $ expr -type f -print' ile '' '' '' '' '' '' '' '. – user1273684

+1

"expr" değerine gömdüğünüz tırnaklar, "expr" genişletildikten sonra kaldırılmaz; Onlar gerçekten tedavi edilir. – chepner

+0

Teşekkürler, şimdi çalışıyor – user1273684

0

doğru sürüm

replace() { 
     if [ -n "$3" ]; then expr=-name\ $3; fi 
     find $PWD -name '.*' -prune -o $expr -type f -exec sed -i s/$1/$2/g {} \; 
     unset expr 
}