Gibi bir şey yazdığımda:
find . -name *foo* | ls -lah
ls
girişi olmadığı gibi düz komutla aynı sonucu verir .
Ancak:
ls -lah $( find . -name *foo* )
İyi çalışır, ancak yalnızca find
komutun sonuçları olduğunda.
Borulamak mümkün mü ls
?
Gibi bir şey yazdığımda:
find . -name *foo* | ls -lah
ls
girişi olmadığı gibi düz komutla aynı sonucu verir .
Ancak:
ls -lah $( find . -name *foo* )
İyi çalışır, ancak yalnızca find
komutun sonuçları olduğunda.
Borulamak mümkün mü ls
?
Yanıtlar:
Komut -exec
ile kullanabilirsiniz find
.
find . -name '*foo*' -exec ls -lah {} \;
find . -name '*foo*' -exec ls -lah {} +
find . -name *foo* | xargs -r ls -lah
Bu çalışması gerekir.
-exec +
(veya -exec \;
) kullanılmasıdır. xargs
yalnızca -0
seçenekle kullanmak güvenlidir; bu xargs
, NULL-byte (\ 0) ile öğeleri sınırlandırmak için hangi komutu yönlendireceğinizi söylemeniz gerektiği anlamına gelir . Seninle find
bunu yapabilirsin -print0
. xargs -0 ve find's -print0 standart değil, ancak -exec, taşınabilirlik bir sorunsa, -exec ile find kullanın.
Bunu kullanın: (ls sıralayabilir, boşluklu veya sıra dışı karakter içeren dosya adlarıyla çalışır)
find . -name *foo* -print0 | xargs -0 ls -lah
"-print0", örneğin file foo 1
çıktısını alacağı find
ve null alacağı . Xargs'ın "-0" argümanı bu tür bir giriş beklemesini söyler, böylece boşluklu dosya isimleri ls
komuta doğru bir şekilde aktarılır .
xargs
İnşaat daha iyi bazı yönlerden ise find etc -exec ls {} \;
dosya adları tümüne gönderilir olsun çünküls
sen (kullanarak zaman damgası yüzünden hepsini sıralamak istiyorsanız eğer öyleyse, bir kerede ls
bu eserleri gibi), bir şey:
find . -iname *pdf -print0 | xargs -0 ls -ltr
Bir NetBSD sisteminde, "-printx" de bir seçenektir (bu benim için yararlı bir argüman gibi görünüyor, ama ne olursa olsun, xargs -0 ve sorun değil):
find . -name *foo* -printx | xargs ls -lah
(Ubuntu için değil)