Dizin ağacındaki her dosyada komut çalıştırmanın en iyi yolu


Yanıtlar:


13
find . -exec <command> {} \;

geçerli dizin için ağacın kökü olarak veya genel olarak:

find <directory> -exec <command> {} \;

4
bazı sistemlerde bulmak dont have -exec seçenek orada bulabilirsiniz kullanabilirsiniz. | xargs <Command>
Hemant

4
Gerçekten, ve bir şeye göre filtrelemek gerekirse, deneyin -name "*.c"veya örneğin -type ddizinler için ...

Bul , tüm seçenek listesi için şaşırtıcı derecede karmaşık şeyler yapabilir - man sayfasını kontrol etmek isteyebilirsiniz - unixhelp.ed.ac.uk/CGI/man-cgi?find -.
Lucas Jones

-Exec ve xargs yaklaşımını bozabilecek boşluklu dosya adlarına da dikkat etmek isteyebilirsiniz. Bakınız tinyurl.com/ygvgmw5
Shawn Chin

Mümkünse find ... | xargs ...deyimi kullanın, dosyaları toplu olarak işler ve bu genellikle daha hızlı olur (daha az işlem başlatılır).
vonbrand

5

Bulma -print0seçeneğini ve boşluklu dosya veya dizin adlarınız varsa -0seçeneğini kullanın xargs:

find {dir} -print0 | xargs -0r {command}

-print0Bir şekilde opsiyon dosya adları dışarı baskılar bulmak için NUL-separated ziyade boşluk daha ayrılmış listesi ise -0seçeneği xargstalimatını o onun girişini kırmak için NULdeğil, boşluk daha. Yana NULUnix dosya adlarında izin verilmez karakterlerden biridir, bir dosya adı parçası için yanlış olması için hiçbir yol yoktur.

-rSeçenek yoktur böylece xargshiçbir girişi varsa size bir hata vermeyecektir.


3

Taşınabilirlik bir sorunsa, kabuğa özgü yollardan uzak dururdum (birçok farklı kabuk kullanan birçok insan var, ancak genel olarak bul ve xargs, kimsenin radikal bir şekilde değişmeye cesaret edemeyeceği gerçekten temel araçlardır) .

Find ve xargs temel argümanlarını kullanmak size daha taşınabilir bir çözüm sunmalıdır.


2

Bağımsız değişkenleri birlikte gruplamak kabul edilebilir durumdaysa, | xargs, komutu -exec dosyasını bulmaktan çok daha az kez yürüteceği için muhtemelen daha iyi performans verecektir. Komutu her dosya için her seferinde yürütmek veya dosyanın alt dizininde yürütmek istiyorsanız, find -exec veya -execdir komutlarını kullanmalısınız.

Kural olarak, kabuğa özgü döngülerden uzak durmak tercih edilir; find & xargs çoğu senaryo için yeterlidir.


1

Kullandığınız komut sürümünün, özyinelemeli işlem için zaten bir bayrağı olmadığından emin olun. :)


0
find [args] -print | xargs {command}

Benim için en iyisi.


2
-1 Boşluk içeren dosya adları için çalışmaz. Daha iyi kullanım find -print0 | xargs -0.
starblue
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.