Bir boru girişini ls komutuna nasıl yönlendirebilirim?


20

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?


Her bulma sonucunun içindeki dosyaları mı yoksa doğrudan arama sonuçlarını mı istediğinizi belirtmeniz gerekir. İkincisi ise, o zaman / Dennis'in cevabı doğru cevabıdır.
rmutalik

Yanıtlar:


27

Komut -execile kullanabilirsiniz find.

find . -name '*foo*' -exec ls -lah {} \;

Çözümünüz için teşekkür ederim. Boru yok ama zarif bir yöntem. 'Bul' ile sonuç bulunamadıysa, hiçbir şey göstermez (aslında iyi olanı).
Lasall

7
Biraz daha iyi bir yol:find . -name '*foo*' -exec ls -lah {} +
jlliagre 22:11

20
find . -name *foo* | xargs -r ls -lah

Bu çalışması gerekir.


1
Bu çözüm için teşekkür ederim. Ama boşluklarla nasıl başa çıkabilirim?
Lasall

2
Her zaman tercih edilen yöntem buluntuların -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.
geirha


3

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)


Bu, bunu yapmaya çalışanlar için ls'nin sıralama işlevlerini gerçekten kullanabildiğim için benim için bir numara yaptı.
Harry Mustoe-Playfair
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.