Linux komutu: dosyaları bul ve üzerinde komut çalıştır


16

Bir dizindeki ve alt dizinlerdeki tüm dosyaları bulmayı ve bunlarda komut çalıştırmayı nasıl başarabilirim?

Örneğin,

find . -type f -name "*.txt" 

tüm txt dosyalarını bulur ve:

find . -type f -name "*.txt" | gedit

gedit'e gönderir, ancak bir metin dosyasının içinde. Gedit'in tüm metin dosyalarını açmasını istiyorum.

Yanıtlar:


22

-execEşleşen her dosyada bir komut yürütmek için bayrağı kullanabilirsiniz :

$ find ./ -type f -name "*.txt" -exec gedit "{}" \;

Sözdizimi

Sözdizimi biraz garip ( -exec command ;daha fazla bilgi için sayfalara bakın):

The string `{}' is replaced by the current file name being processed

Ayrıca -execdir, aynı şeyi yapacak, ancak eşleşen dosyayı içeren alt dizinden komutu yürütebilirsiniz (bu genellikle tercih edilir).


1
Teşekkürler. İşe yaradığını görüyorum. Peki sonu ("{}" \ :) ne anlama geliyor? listesi yürütmek?

1
{}Geçerli dosya adı duruyor ve noktalı virgül sadece komutu sona eriyor. Ters eğik çizgi ve çevresindeki alıntılar yalnızca kabuk genişlemesini önlemek içindir.
David Cain

5

find . -type f -name "*.txt" -print0 | xargs -0 gedit


Teşekkürler. İşe yaradığını görüyorum. Peki -print0 | xargs -0 kısmı nedir?

1
@xyz, man sayfalarını kullanarak herhangi bir UNIX komutunun bayraklarını okuyabilirsiniz . Deneyin man findveya man xargsdaha sonra /verilen bir bayrak aramak için. Dokümantasyon oldukça iyidir, sorularınızı cevaplamalıdır.
David Cain

1
-print0her girişten sonra bir NULL karakter yazdırır, -0girişlerin NULL karakterle ayrılmasını bekler. Zor isimleri ele almanın en güvenli yoludur.
Notinlist 14:13

Ve sözdiziminin xargs -0 gedit yerine gedit xargs -0 olmaması biraz garip değil. Birincisinin işe yaramadığını görüyorum, ama nedenini göremiyorum.

3
xargs performans nedenlerinden ötürü -exec yerine tercih edilir, çünkü xargs birtakım argümanları gedit'e geçirmeden önce "toplayabilir". Her dosyaya ayrı ayrı gedit çalıştırmak için gerekirse '... -print0 | xargs -0 gedit 'ile' ... -print0 | xargs -0 -i gedit {} 'xargs, bul ve ekran gibi bu komutlardan bir tanesini öğrendikten bir yıl geçmeden nasıl ilerlediğini asla bilemeyeceğin biridir.
arclight
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.