-exec kullanılırken bulma komutundaki dosya adını nasıl verirsiniz?

21

PWD'nin tüm alt dizinlerini bulmak için aşağıdaki satırı kullanıyorum ve her dizinde svnadmin verify çalıştırıyorum (Zaten Subversion depolarının olduklarını biliyorum)

find ./* -maxdepth 0 -exec svnadmin verify {} \;

Bu, çıktının şuna benzediği gerçeğinin dışında iyi çalışır:

* Verifying repository metadata ...
* Verifying metadata at revision 1 ...
* Verifying metadata at revision 2 ...
* Verifying metadata at revision 4 ...
* Verifying metadata at revision 5 ...
* Verifying metadata at revision 6 ...
* Verifying metadata at revision 9 ...
* Verifying metadata at revision 10 ...
* Verifying metadata at revision 12 ...
* Verifying metadata at revision 14 ...
* Verifying metadata at revision 15 ...
* Verifying metadata at revision 18 ...
* Verifying metadata at revision 20 ...
* Verifying metadata at revision 22 ...
* Verified revision 0.
* Verified revision 1.
* Verified revision 2.
* Verified revision 3.
* Verified revision 4.
* Verified revision 5.
* Verified revision 6.
* Verified revision 7.
* Verified revision 8.
* Verified revision 9.
* Verified revision 10.
* Verified revision 11.
* Verified revision 12.
* Verified revision 13.
* Verified revision 14.
* Verified revision 15.
* Verified revision 16.
* Verified revision 17.
* Verified revision 18.
* Verified revision 19.
* Verified revision 20.
* Verified revision 21.
* Verified revision 22.
* Verified revision 23.
* Verified revision 0.
* Verifying repository metadata ...
* Verifying metadata at revision 4 ...
* Verifying metadata at revision 5 ...
* Verifying metadata at revision 6 ...
* Verifying metadata at revision 7 ...
* Verifying metadata at revision 9 ...
* Verified revision 0.
* Verified revision 1.
* Verified revision 2.
* Verified revision 3.
* Verified revision 4.
* Verified revision 5.
* Verified revision 6.
* Verified revision 7.
* Verified revision 8.
* Verified revision 9.

Günlüğe kaydetmeyi kolaylaştırmak için find komut dosyasının yürütülmesinden önce dosya adını svnadmin verify yazmasını istiyorum.

Orada bulunan ls 'sini sıkıştırmaya çalıştım, ama bunu nasıl yapacağım, bunu nasıl yapmalıyım (tercihen basitçe)?

    
sordu Arronical 22.07.2015 13:48

7 cevap

25

öncesinde bir -printf seçeneği eklemeniz yeterlidir
find -printf '%p' -exec command \;
    
verilen cevap Fiximan 22.07.2015 13:59
12

Tekrarlamak istemezseniz, find 'yi kullanmanın bir anlamı yoktur. Kabuğun içinde doğrudan yapmak çok daha kolaydır:

for d in */; do echo "$d"; svnadmin verify "$d"; done

for d in */ tüm dizinleri bulur ( */ sadece dizinleri sağlar ve hiçbir dosya bulunamadı); echo "$d" , yöneticinin adını yazdıracak; svnadmin verify "$d" dizini kontrol edecektir.

Bu, doğrudan komut satırından veya formatta değişiklik olmayan bir komut dosyasından çalıştırılabilir.

    
verilen cevap terdon 22.07.2015 14:14
6
find ./* -maxdepth 0 -type d -exec bash -c 'echo "{}"; svnadmin verify "{}"' \;

Yalnızca dizinlerse -type d ekledim.

    
verilen cevap 7171u 22.07.2015 13:53
5

Bunu deneyin:

for f in * ; do echo  -n "${f}:"; svnadmin verify "${f}"; done

Yalnızca dizinleri (Kos notuna teşekkürler) istiyorsanız:

for f in */ ; do echo  -n "${f}:"; svnadmin verify "${f}"; done
    
verilen cevap Maythux 22.07.2015 13:59
2
  • . -maxdepth 1 yerine ./* kullanın, sadece klasör yapısında ilk seviyeye ihtiyacınız var
  • -type d değerini kullan, sadece klasörlere ihtiyacınız var
  • ! -name "." değerini kullan, . değerine ihtiyacınız yok
  • Bir kabuk başlatmak için -exec kullan
  • Kabuğun içindeki komutları başlatmak için sh -c kullan

Sizin emriniz

find . -maxdepth 1 -type d ! -name "." -exec sh -c 'echo "{}"; svnadmin verify "{}"' \;

veya daha kısa

  • Dosya bir dizin ise -prune kullanın, inmeyin

Sizin emriniz

find . -mindepth 1 -prune -exec sh -c 'echo "{}"; svnadmin verify "{}"' \; 
    
verilen cevap A.B. 22.07.2015 14:18
0

find çıktısını read döngüsüne aktarmak faydalı olabilir:

find . | while read d; do echo "=== ${d}: ==="; svnadmin verify ${d}; done

Bu find örneğinde olduğu gibi ls tarafından döndürülen dosya adları ile daha karmaşık, bileşik komut dizisi yürütmenize izin verir:

find . | while read f; do echo ${f} | figlet -k; done
    
verilen cevap Ves 09.06.2017 16:54
0

find , diğer yanıtlarda daha önce bahsedilen yazdırma için seçenek bayraklarına sahiptir. Soruna bakarsak, şu anda işlenen aynı dosya için birden çok komutun yürütülme perspektifini oluşturursak, find , -exec ifadesinin% kullanımına izin verir. Bu, şunları kullanmayı tercih edebileceğimiz anlamına gelir:

find ./* -maxdepth 0 -exec echo {} \; -exec svnadmin verify {} \; 

Yine, bu yaklaşımın yalnızca echo , printf veya diğer yardımcı programlarla değil, aynı zamanda diğer komutlarla da yazdırılabileceğini unutmayın.

    
verilen cevap Sergiy Kolodyazhnyy 28.05.2018 01:49

Etiketlerdeki diğer soruları oku