Gibi bir şey yazdığımda:
find . -name *foo* | ls -lah
lsgirişi olmadığı gibi düz komutla aynı sonucu verir .
Ancak:
ls -lah $( find . -name *foo* )
İyi çalışır, ancak yalnızca findkomutun sonuçları olduğunda.
Borulamak mümkün mü ls?
Gibi bir şey yazdığımda:
find . -name *foo* | ls -lah
lsgirişi olmadığı gibi düz komutla aynı sonucu verir .
Ancak:
ls -lah $( find . -name *foo* )
İyi çalışır, ancak yalnızca findkomutun sonuçları olduğunda.
Borulamak mümkün mü ls?
Yanıtlar:
Komut -execile 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. xargsyalnızca -0seç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 findbunu 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ğı findve null alacağı . Xargs'ın "-0" argümanı bu tür bir giriş beklemesini söyler, böylece boşluklu dosya isimleri lskomuta 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 lsbu 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)