Manuel sayfa (veya çevrimiçi GNU manuel ) hemen hemen herşeyi açıklıyor.
bul -exec komutu {} \;
Her sonuç command {}
için yürütülür. Tüm geçtiği {}
yerleri dosya adı ile değiştirilir. ;
, kabuğun onu yorumlamasını önlemek için bir eğik çizgi ile başlar.
bul -exec komutu {} +
Her sonuç command
daha sonra eklenir ve yürütülür. Komut uzunluğu sınırlamalarını hesaba katarsak, bu komutun beni destekleyen kılavuz sayfasıyla daha fazla kez çalıştırılabileceğini tahmin ediyorum:
komutun toplam çağrı sayısı, eşleşen dosyaların sayısından çok daha az olacaktır.
Kılavuz sayfasındaki bu alıntıya dikkat edin:
Komut satırı, xargs'ın komut satırlarını oluşturduğu şekilde oluşturulmuştur.
Bu nedenle boşluklar arasında {}
ve +
dışında hiçbir karaktere izin verilmez . +
argümanların aynı komuta eklenmesi gerektiğini algılamasını sağlar xargs
.
Çözüm
Neyse ki GNU gerçeklemesi mv
, hedef dizini bir -t
veya daha uzun parametreli bir argüman olarak kabul edebilir --target
. Kullanım şu şekilde olacaktır:
mv -t target file1 file2 ...
Sizin find
komut haline gelir:
find . -type f -iname '*.cpp' -exec mv -t ./test/ {} \+
Kılavuz sayfasından:
-exec komutu;
Komutu çalıştır; 0 durumu döndürülürse true. Aşağıdaki tüm argümanlar, aşağıdakilerden oluşan bir argüman olana kadar komutun argümanları olarak alınır. karşılaşılır. `{} 'Dizesi, find'ın bazı sürümlerinde olduğu gibi, yalnızca bağımsız değişkenlerde değil, komutun bağımsız değişkenlerinde bulunduğu her yerde işlenen geçerli dosya adı ile değiştirilir. Bu yapıların her ikisinin de kabuk tarafından genişlemesini önlemek için kaçılması (bir `` ile) veya alıntı yapılması gerekebilir. -Exec seçeneğinin kullanımına ilişkin örnekler için ÖRNEKLER bölümüne bakın. Belirtilen komut her eşleşen dosya için bir kez çalıştırılır. Komut, başlangıç dizininde yürütülür. -Exec eyleminin kullanımıyla ilgili kaçınılmaz güvenlik sorunları vardır; bunun yerine -execdir seçeneğini kullanmalısınız.
-exec komutu {} +
-Exec eyleminin bu varyantı, seçilen dosyalarda belirtilen komutu çalıştırır, ancak komut satırı, seçilen her dosya adını sonuna eklenerek oluşturulur; komutun toplam çağrı sayısı, eşleşen dosyaların sayısından çok daha az olacaktır. Komut satırı, xargs'ın komut satırlarını oluşturduğu şekilde oluşturulmuştur. Komut içinde yalnızca bir `` {} '' örneğine izin verilir. Komut, başlangıç dizininde yürütülür.