Linux ve SVN: KEEP dizin yapısı hariç tüm sürüm dosyaları nasıl kaldırılır, .svn dirs yoksay?


9

Tüm sürümlü dosyaları havuzumdan kaldırmak istiyorum, ancak sürümlü dizin yapısını TUTUN. Açıkçası tüm .svn dizinlerini el değmeden bırakmak istiyorum.

Başka bir deyişle, dizin yapısının kendisine zarar vermeden çalışan bir kopyanın dizin yapısını tamamen boşaltmak istiyorum.

Örneğin, dosyaları bu yapıdan kaldırmak:

dir/
    .svn/
        [files]
    svsubdir1/
        file1
        .svn/
            [files]
    subdir2/
        file2
        file3
        file4
        .svn/
            [files]
        subsubdir1/
            file5
            .svn/
                [files]

Şunlarla sonuçlanmalıdır:

dir/
    .svn/
        [files]
    svsubdir1/
        .svn/
            [files]
    subdir2/
        .svn/
            [files]
        subsubdir1/
            .svn/
                [files]

Bunu gerçekleştirmek için bir tür findkomut ya da bir şey arıyorum ve komutu oluşturmakta sorun yaşıyorum. Yardım için teşekkürler!


Bunu yapmamın nedeni, "sürümlerde" geliştirilmiş ancak daha önce hiç revizyon kontrolünde bulunmamış bir web uygulamam olması. Ben şimdi SVN revizyon kontrolü altına koymak istiyorum, ve tarihsel referans kolaylığı, vb için, kademeli olarak eski sürümleri içeren dört farklı "yedekleme" klasörlerinden dört sürümü bir ilerleme çoğaltmak çalışıyorum. Dosyalar silindikten sonra, yeni düzeltmeyi simüle etmek için yeni dosyaları hiyerarşiye kopyalayabilirim. Tüm bunların mantıklı olup olmadığından emin değilim. :)
Brian Lacy

1
Sürüm 1.7'den (Ekim 2011) beri SVN'nin artık birden çok ".svn" dizinine sahip olmadığını, ancak en üst düzeyde yalnızca bir .svn dizinine sahip olduğunu belirtmek gerekir. Bkz. Subversion.apache.org/docs/release-notes/1.7.html#wc-ng
Zengin

Yanıtlar:


10
find dir/ -path '*/.svn' -prune -o -type f -print

tasarıyı sığdırmalıdır (çoğunlukla arama kılavuzundan gelir -path). Daha az borulayın ve kontrol edin. Yaptığı şey ilk olarak (yol .svn ile biter ve bu dizine girip (budama yapmayın)) veya (eğer bir dosyaysa, yazdırın).

İyi görünüyorsa, şu şekilde değiştirin:

find dir/ -path '*/.svn' -prune -o -type f -exec rm {} +

+ Sürümü tüm dosyaları tek bir rm komutuna yapıştırır. Paranoyaksanız, önce ağacın ( cp -a dir/ otherdir/) bir yedeğini tutun .


Mükemmel çözüm, tam da ihtiyacım olan şey bu! Teşekkürler Derf!
Brian Lacy

'-Exec rm {} +' yerine daha sezgisel '-delete' seçeneğini de kullanabilirsiniz.
Tim Bielawa

1
@ Zamanlama Bulma sayfasına göre, -deleteönce derinliktir ve bu nedenle -prune, klasör içindeki dosyalar incelenmeden önce kontrol edileceği için çakışır . Diğer çözüm ( -delete seçeneğini kullanmak -not -path ...yerine -path ... -prunekullanmaktır.
DerfK

Güzel yakalayış!
Tim Bielawa

Bu hileyi (veya benzerlerini) yıllar boyunca çeşitli senaryolarda birçok kez kullandım. Tekrar teşekkürler, @DerfK. :)
Brian Lacy

2
bulmak. -not -yolu "* /. svn / *" -ve -tip f -ve -exec / bin / rm '{}' \;

Hile yapmalı.


Sadece bir ipucu, ama bunun yerine -exec /bin/rm '{}'kullanabilirsiniz -delete.
Aaron Copley
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.