Eşleşen her sonucun ilk dizini içinde komutu yürütün


0

Kodun farklı kaynak kontrol sistemlerinin bir karışımı olduğu bir projeye sahip bir müşteride çalışıyorum. Yani bir düzen böyle olabilir

project/a/.svn
       /a/subfolder/.svn
       /b/.hg
       /c/subproject/.svn
       /d/.hg

Bu yüzden proje klasöründen çalıştırıldığında her projede uygun hg / svn komutunu çalıştıracak basit bir komut oluşturmaya çalışıyorum :

pushd a/
svn up
popd
pushd b/
hg pull
popd
:

Müşteri bu kadar çok projeye sahip olduğundan, klasör yapısını bir komut dosyasında kodlamak zorunda kalmayacağınızı takdir ediyorum. Bunun yerine , svn / hg komutlarının eşleşmenin her birinci düzeyinde otomatik olarak yürütüldüğü -exec komutuna benzer bir çözüm arıyorum (yani svn up proje / a klasöründe çalıştırılır ancak proje / a / alt klasörde çalıştırılmaz ). Böyle bir komut nasıl oluşturulabilir?

Yanıtlar:


2

Bir fikir:

find /project -maxdepth 1 -type d \( -name .svn -execdir svn up \; \
    -o -name .hg -execdir hg pull \; \) 

Düzenleme: belki de bir şey

find /project \( -execdir test -d {}/.svn \; -execdir sh -c \
    'cd {} && svn update' \; -o -execdir test -d {}/.hg \; \
    -execdir sh -c 'cd {} && hg pull' \; \) -prune

Her ne kadar "maxdepth", sonuç seviyesinden ziyade arama düzeyinde çalışmak için dikiş atıyor olsa da (yani yukarıdaki örnekte / c / subproject / ayrıca kökten derinlik 3'e sahip olan bir subversion repo içerir). Yapmak istediğim, karşılaştığım ilk klasörde bir repo olan bir svn / hg komutunu çalıştırmaktır, bu klasör keyfi yuvalanmış olabilir).
— Lars Tackmann,

Düzenlenmiş sürümü deneyin ve işe yarayıp yaramadığına bakın.
— jw013

Teşekkürler, bu olması gerektiği gibi çalışır (komutlar şimdi tüm doğru dizinlerde yürütülür). Geriye kalan tek sorun, aynı dizini birden çok defa bulmasıdır (svn / hg güncellemelerinin yürütülmesi oldukça zaman alan bir işlemdir). Bir şekilde benzersiz bir seçenek atmak mümkün olup olmadığını merak ediyorum.
— Lars Tackmann,

1
Hmm, umarım 3. sefer cazibedir.
— jw013

işte o;) - bir
— paylaştıkça
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.