DOS “dir / s / b dosyaadı” nın Linux eşdeğeri nedir?


17

Geçerli dizindeki veya altındaki 'dosyaadı' ile eşleşen tüm dosyaları / dizinleri listeleyin.

Yanıtlar:


28

Doğrudan eşdeğer

find . -iname <filename>

<filename>geçerli dizinde ve tüm alt dizinlerde çağrılan tüm dosya ve dizinleri listeleyerek büyük / küçük harfleri görmezden gelir.

Bulma sürümünüz desteklemiyorsa -iname, -namebunun yerine kullanabilirsiniz . Bunun aksine -iname, -namebüyük / küçük harfe duyarlıdır.

<filename>Dizinleri değil, yalnızca denilen dosyaları listelemek istiyorsanız ,-type f

find . -iname <filename> -type f

Joker karakterler kullanmak istiyorsanız, etrafına tırnak işareti koymanız gerekir, örn.

find . -iname "*.txt" -type f

aksi takdirde kabuk onu genişletir.

Diğerlerinin işaret ettiği gibi şunları da yapabilirsiniz:

find . | grep "\.txt$"

grep joker karakterlerden daha güçlü ancak farklı bir sözdizimine sahip düzenli ifadelere dayalı satırlar basar.

Daha fazla ayrıntı için man findve bölümüne bakın man grep.


3
Eğer <filename>joker içeren, örneğin çevresinde tırnak kullanabilirsiniz find . -name '*.txt'.
Gilles 'SO- kötü olmayı bırak

@Gilles, cevabımı güncelledi, teşekkürler.
Mikel

2
<filename>Userinput için işaretleyici olarak kullanmak , < and >çoğu zaman belirli bir anlama sahip olan komut satırı ortamında kötü bir alışkanlıktır . Sadece filenamevurgulamak için belki FILENAME kullanmanızı öneririm . Çoğu insan anlar ve anlamayacak olanlar, işaretten daha az veya daha fazla çarpmamaları gerektiğini anlamadıkları zaman zarar verebilirler.
kullanıcı bilinmiyor

2
<filename>UNIX belgelerinde bir kuraldır, bu yüzden insanların bunun farkında olması yararlı olduğunu düşünüyorum, ancak FILENAMEanlaşılması daha kolay olabilir.
Mikel

1
find -iname <filename>DOS gibi büyük / küçük harfe duyarlı olmadığından daha iyidir
Agnel Kurian

8

Bazı mermiler izin verir ls **/filename, ki bu oldukça uygundur.


1
İyi bir nokta. Bash'ın son sürümlerinde çalıştırma shopt -s globstar; echo **/filenameeşdeğerdir find . -name "filename". Ayrıca zsh olarak da çalışır.
Mikel

Bu 'ls ** / dosyaadı` iyidir, ancak bir dizin düzeyinde daha derine gitmez.
Sopalajo de Arrierez

@ sopalajo-de-arrierez Eğer yaparsanız shopt -s globstar, muhtemelen sizin için çalışacaktır. Özyinelemeli globbing, yalnızca bazı kabuklarda bulunan bir özelliktir ve bazen varsayılan olarak açık değildir.
Shawn J. Goff

Ops ... Şimdi anlıyorum, @ ShawnJ.Goff: shoptkomut seçeneği etkinleştirir globstar on. Şimdi bir cazibe gibi çalışıyor. Çok teşekkürler.
Sopalajo de Arrierez

4

Bunu ile yapabilirsiniz

find . | egrep filename

1
Bunu biriyle de yapabilirsiniz find . -regextype posix-egrep -regex '.*filename.*'( egrepegrep
Parçanın

Yapabilirsiniz, ancak grep eşdeğer DOS komutundan farklıdır. grepDOS komutu kabuk joker karakterlerini kullanırken normal ifadeler kullanır.
Mikel

1
Bir düşünün, kabuk globları da DOS joker karakterlerinden farklı. Örneğin, find . -name "*.*"DOS arka planından beklediğinizi yapmayacaksınız. Bununla birlikte, küreler tanınabilecek kadar yakınken, regex'ler tamamen yeni bir canavardır.
Jander

Ne yok *.*.*yani pencereler cmd modern dos yapmak? Ne olmuş *.*.*.*?
ctrl-alt-delor

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.