Komutu Bul: Davayı yoksaymak nasıl?


170

Büyük bir dizin hiyerarşisinde "WSFY321.c" dosyasını arıyorum.
Genellikle GNU bulucusunu kullanırdım : find . -name "WSFY321.c"
Ama durumu bilmiyorum, büyük, küçük harf veya her ikisinin karışımı olabilir.

Bu dosyayı bulmanın en kolay yolu nedir?
Bundan daha iyi bir şey var mı find . | grep -i "WSFY321.c"?

Yanıtlar:


214

GNU’nun son sürümlerinde büyük küçük harf duyarlı ad aramaları için findbir -inamebayrak bulunur.

find . -iname "WSFY321.c"

6
Ayrıca, özellikle bir dosya aradığınızdan, muhtemelen-type f inode'un bir dizin olması durumunda isme bakmaktan rahatsız olmayacak şekilde, bayrakla işaretli diğer birkaç keneyi tıraş edebilirsiniz . Ama bu
sersemletici

Yapabileceğiniz bazı regex'lerle çalışmak içinfind . -iname \*WSFY321.c\* -type f
Benj

40

GNU bul ile veya buna sahip olan bulgunun diğer sürümleriyle:

find . -iname 'WSFY321.c'

Diğer versiyonlarla:

find . -name '[Ww][Ss][Ff][Yy]321.[Cc]'

Ya da yazması yavaş fakat daha kolay bir uzlaşma:

find . -name '????321.c' | grep -i '/WSFY[^/]*$'

Veya zsh cinsinden:

print -rl -- **/(#i)WSFY321.c

@Gillesgrep versiyonu tek harf filtre olduğunu ve [^ /] '.. (değil /) anlamıyorum
Peter.O

@Gilles İlk durumda tek tırnakları hiçbir alıntı olmadan kullanmak için argüman nedir?
Bernhard

@ Peter.O Bash sürümünden *sonra hayır /. Kastettiğim grep -i. Bunun [^/]*yerine .*, ismi ile başlayan dizinlerdeki dosyaları yakalamak için kullanmıyorum WSFY.
Gilles

5
@ Bernhard Tutarlılığı.
Gilles

Teşekkürler Gilles: Önceki yorumu yanlış sözdizimiyle sildim ve değiştirilmiş versiyonu test ettim, ancak * olmadan çalışmaz (beklenmedik bir nedenden dolayı; en azından benim için). : Harfe duyarsız seçeneği artık çalışır shopt -s extglob nocaseglob globstar; printf '%s\n' **/WSFY321.c... Size öyle bir denir neden varsayalım nocase topak sadece bir topak bağlamında çalışır (ya da öyle görünüyor).
Peter.O

1

MacOS için iki çözüm:

GNU’yu kullanma find:

brew install findutils --with-default-names
# restart Terminal
find . -iname 'WSFY321.c'

GNU’yu kullanma sed:

brew install gnu-sed --default-names
# restart Terminal
find -name "$(sed 's|\([[:alpha:]]\)|[\U\1\L\1]|g' <<<'WSFY321.c')"

1
MacOS Sierra'da -iname seçeneği varsayılan olarak kullanılabilir.
ThomasW '
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.