Mac OSX terminalinde dosya adına göre bir dosyayı nasıl bulabilirim?


118

Ben dosya ile benim Macbook bir dosyayı bulmak istiyorum: abc.dmg. Spot ışığı kullanmaya çalıştım ama bulamadı. Bulmaya çalıştığımda ve kullandığımda: find -name abc.dmg -path /hatalarımı geri aldım.

Bir dosyayı Mac OSX terminalinde find komutuyla dosya adına göre bulmak için uygun sözdizimi nedir?


1
@VxJasonxV Süper Kullanıcı için konuyla ilgili Apple soruları% 100'dür ve her Apple sorusunun oraya taşınmasına gerek yoktur. Ancak iPhone veya iPad soruları gerektiğinde / gerektiğinde taşınacaktır.
BinaryMisfit,

Konu dışı olmanın bir nedeni değildi, ama bu genel konu için daha spesifik bir konu / site olduğu gerçeği.
VxJasonxV

@Diago: Bununla ilgili meta veya sohbetle ilgili bir tartışma oldu mu? Merak ediyorum çünkü AFAIK elması.SE çok yakında betadan çıkacak, bu yüzden herkesi aynı sayfada görmek güzel olurdu.
Robert S Ciaccio,

1
@calavera. Oldukça eski bir tartışma ancak konu ile ilgili burada bulunabilir . Apple SE, Ubuntu SE ve Linux SE hepsi Süper Kullanıcı'yı iltifat etmek için oradalar, ancak hiçbir şekilde kullanıcıları hareket etmeye zorlamak istemiyoruz. 3 farklı işletim sistemi kullandığım için Apple'ıma burada Apple yerine soru sormayı tercih ediyorum. Çok özel bir sorum varsa, daha özel bir sitede soracağım.
BinaryMisfit

Yanıtlar:


163

En basit haliyle, findbir parametre alır: yol. Aslında faydalı haliyle, kriterleri daraltmak için yolu izliyor.

Böylece, istediğiniz:

  • find (program)
  • / (yol) ve
  • -name abc.dmg (kriter).
find / -name abc.dmg

12
Sürücünün tamamını ararken izin verilen tür hataları alabilirsiniz ancak dosyanın kısıtlanmış bir klasörde olmasını beklemeniz dışında bunlar göz ardı edilebilir. Böylece kullanırsanız sudo find / -name abc.dmg
Chris Nava

Denedim, ama sonuç yok.
SPRBRN

6
Muhtemelen o zaman, bilgisayarınızda abc.dmg adlı bir dosya yok. Arama durumunu duyarsız hale getirmek için -name yerine -iname komutunu kullanabilirsiniz. Aslında "abc.dmg" kelimesini aradığınızdan şüpheliyim ve (muhtemelen) gerçeği göz önüne alındığında, sorununuzu gerçek ayrıntılara sahip olmadan söylemek zor.
VxJasonxV

2
@ rxt: bulmazsa onu bulmazsa, orada olmaz ...
Robert S Ciaccio 19

5
OP raporunun soru metninde bulmayı denediği göz önüne alındığında, iddiaların önem sırasına göre dikkat edilmesi find önemlidir . Olması gerekiyorsa find [path]+ [selection, grouping, and actions].
dmckee

23

find . -name '*.csv'Mesela benim için joker karakterlerle çalıştı. OP find . -name '*.dmg', içinde bulunduğunu varsayarak mevcut dizinini kontrol etmek için de kullanabilir /.



6

locateKomutu kullanabilirsiniz .

locate abc.dmg

2
Not osxetiketi. slocate db varsayılan olarak doldurmaz.
VxJasonxV

Veritabanını oluşturduktan sonra denedim ama sonuç yok.
SPRBRN

eğer locateve mdfindher ikisi de başarısız, büyük ihtimalle dosya makinenizde değildir bulunmaktadır. Ya da adlandırıldığını düşündüğünüz şekilde adlandırılmamıştır. Belki de TÜM DMG'leri aramak bir sonraki adımınız olabilir?
soyucu

3

En basit yöntem (zaten denediğinizden eminim ama hey, yine de konuya ekleyeyim), herhangi bir bulucu penceresinin sağ üstündeki arama kutusuna abc.dmg yazıp ardından "Dosya" yı seçin. Görünen Arama Çubuğundaki seçeneklerden "Adı".

Terminal için gerek yok.

Ayrıca Spotlight'ın yalnızca Spotlight kontrol panelinde belirtilen dizinleri endekslediğini ve abc.dmg'nin bu dizinlerden birinde bulunmayabileceğini unutmayın.

Hatalıysam, beni düzeltin, ancak find komutunun neyin çıktısını bilmesi gerektiğini düşünüyorum:

find / -name abc.dmg -print

... terminale bir sonuç yazmalıdır (izin hataları dahil).

İzin hataları istemiyorsanız ve diğer Kullanıcı dizinlerini aramak istiyorsanız:

sudo find / -name abc.dmg -print

2

İlgili dosyayı hızlıca bulmak ve açmak için aşağıdaki komut satırı işlevlerini kullanabilirsiniz. Bunu spotlight penceresine uzun bir sorgu dizesi yazmaktan daha kolay buluyorum.

İçine aşağıdaki işlevleri ekleyin ~/.bash_aliases.

# find any item matching search query in file name
spot(){
  mdfind "kMDItemDisplayName=='*$1*'cd";
}

# restrict to files under (recursive) a specific path 
findpaper(){
    mdfind -onlyin "/Users/foo/articles" "kMDItemDisplayName=='*$1*'cd";
}

# default to open the first entry unless 2nd positional argument is given
openpaper(){
    FILEID=$(printf "%sp" ${2:-1})

    open "$(mdfind -name -onlyin "/Users/foo/articles" "kMDItemDisplayName=='*$1*'cd" | sed -n "${FILEID}")"

}

Şimdi, source ~/.bash_aliasesyeni bir terminal yükü fonksiyonunu açın veya açın. Dosya adında herhangi bir yerde kelime, pasta ve 2016 bulunan dosyaları aramak için,

spot pie*2016 #or
spot 2016*pie

*Sorgunuzu arama deseni olarak hazırlamaya veya eklemeye gerek yoktur , bu '*$1*'durumda sorgunun başında ve sonunda joker karakter girişini etiketler. Ek cd, büyük / küçük harfe duyarsız ve görmezden fredgelinen aksanlı işaretler, örneğin, hem Frédéric hem de FrEDeric'i geri getirecek.

findpaperopenpaper pie*201Bir (veya birden fazla sonucun ilki) bir arama sonucunu openpaper pie*201 3açarken veya üçüncü bir sonuç girişi açarken , belirli bir yolun altındaki aramaları (özyinelemeli) ile sınırlandırır . Bash komut dosyalarını veya diğer doküman olmayan dosyaları açmaktan kaçınmak için, dosya içeriğini ek arama özellikleriyle kısıtlayabilirsiniz. Diğer arama operatörlerini kullanmak için bkz. Dosya Meta Verileri Sorgu İfadesi Sözdizimi ve https://ss64.com/osx/mdfind.html .


Korku veren! Stilling: D
Atcold

0

Diskinizdeki her dosyanın listesini / dizininden root olarak alın

sudo find / &> ~/file-list.txt
sudo chown $(whoami) ~/file-list.txt

Tüm sürücüyü aramak için grep üzerinden tüm dosyayı yakalayın:

cat ~/file-list.txt | grep abc.dmg

Yalnızca .jpg ve .dmg dosyalarını göstermek için normal ifadeleri kullanın:

cat ~/file-list.txt | grep -E "(\.dmg|\.jpg)"

Sonuç:

Applications/Visualisations/CurvedSpaces-forMac.app/Contents/Resources/Textures/paper.jpg

...vb. Maalesef, takılı tüm diskleri de yakalayacağız, Time Machine olanları çok sayıda bağlantıya sahip çıkarıyorlar. Bu yüzden başka bir pencerede koşuyorum watch tail -n 10 ~/file-list.txtki bu bana korkaklık hackimin neresinde kaldığını gösteriyor!


1
Kötü uygulamalar veya bazı yorumları hak eden şeyler: (1) sudo find / > ~/file-list.txttüm kabuğu kök olarak çalıştırmaktan daha iyi görünüyor. (2) find *(varsa) içindeki gizli (nokta) nesneleri atlayacaktır /. (3) &>bir faşizmdir. (4) Yararsız kullanımı cat. (5) grep abc.dmgörn /foo/bar/123abcXdmg456/baz/whatever. // Cevabınızın bu konuya getirdiği iyi bir şey (ve diğer cevap yoktur), kullanıcının bir findkez çalıştığı ve daha sonra dosya sistemlerini tekrar tekrar sorgulamadan kaydedilen sonucu tekrar tekrar kullandığı yaklaşımdır. Bu potansiyel avantaj olsa aksanlı değil.
Kamil Maciorowski

iyi nokta teşekkürler Kamil, bunu yaptım ve ayrıca $ chown (whoami)
Tomachi
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.