Soru iki bölümden oluşuyor:
- nasıl yok
find
kullanarak çağrı programlarına yönetmek -exec
dosya adlarında gömülü boşluklar sorun haline çalıştırmadan ve
-print0
seçenek ne kadar iyi ?
Birincisi, find
bir sistem çağrısı yapmak, aslında "exec" olarak adlandırılan ilgili gruplardan biri . Dosya adını doğrudan bu çağrıya bir argüman olarak iletir; bu çağrı daha sonra dosya adı hakkında bilgi kaybetmeden doğrudan (yeni bir işlem oluşturduktan sonra) geçirilir.
POSIX find
özelliği gerekçede+
şu şekilde açıklanmıştır :
SVR4'ün find
yardımcı programının bir özelliği -exec
birincil + sonlandırıcıydı. Bu, özel karakterler (özellikle yeni satır karakterleri) içeren dosya adlarının, bu tür dosya adlarına bağlanırsa ortaya çıkan sorunlar olmadan birlikte gruplanmasına izin verdi xargs
. Diğer uygulamalar, özellikle -print0
boş bir bayt sonlandırıcıyla dosya adları yazan bir birincil olan bu sorunu aşmanın başka yollarını da ekledi . Bu burada kabul edildi, ancak benimsenmedi. Boş bir sonlandırıcı kullanmak, find'ın -print0
çıktısını işleyecek herhangi bir yardımcı programın, şimdi okuyacağı boş sonlandırıcıları ayrıştırmak için yeni bir seçenek eklemesi gerektiği anlamına geliyordu
.
Bu " özellikle bir -print0
birincil" GNU belirtir find
ve xargs
bu, farklı bir şekilde sorunu çözmek. Ayrıca FreeBSD find
ve xargs
. Çağrıya bir -0
seçenek eklediyseniz ( kılavuz sayfasına bakın ) xargs
, bu program "boş bayt" karakterleri ile sonlandırılmış satırları kabul eder. Buna karşılık, xargs
aramaları exec yapmak -functions onun çalışmalarını. -print0
Ve -0
özelliği ile özellik arasındaki ana ayrım +
, birincisinin dosya adlarını bir boru üzerinden geçirmesi, ikincisinin ise bir boru üzerinden geçirmesidir. Geliştiriciler hemen hemen her özellik için kullanım alanı bulur; borular bir istisna değildir.
Aşağıdakiler için bir -t
seçenek kullanan OP örneğine dönün cp
: POSIX cp'de bulunamadı . Aksine, GNU cp tarafından sağlanan bir uzantıdır (diğer bir deyişle "standart dışı özellik") . -0
Uzatılması xargs
Bu örneği yükseltmekle kalmayacak, ancak taşınabilir alternatif olmadığını akılda etkili bir tutma kullanılabilecek başka durumlar da vardır +
, GNU find
kabul eder.
find..exec
garip dosya adlarını kendi başlarına