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.