2010-12-28 17:42:34 +0000 2010-12-28 17:42:34 +0000
133
133

Hoe vind ik een bestand op bestandsnaam in Mac OSX terminal?

Ik wil een bestand vinden op mijn Macbook met de bestandsnaam: abc.dmg. Ik heb geprobeerd om de spotlight te gebruiken, maar het vindt het niet. Toen ik probeerde te vinden, en gebruikte: find -name abc.dmg -path /, kreeg ik fouten terug.

Wat is de juiste syntax om een bestand te vinden op bestandsnaam met het find commando op een Mac OSX terminal?

Antwoorden (7)

182
182
182
2010-12-28 17:45:50 +0000

In zijn eenvoudigste vorm neemt find één parameter: het pad. In zijn eigenlijk nuttige vorm neemt het het pad dat gevolgd wordt door vernauwende criteria.

Zo wil je:

  • find (het programma)
  • / (het pad), en
  • -name abc.dmg (de criteria).
find / -name abc.dmg
26
26
26
2016-10-27 14:11:10 +0000

find . -name '*.csv' bijvoorbeeld werkte voor mij met wildcards. OP kon find . -name '*.dmg' ook gebruiken om zijn huidige directory te controleren, ervan uitgaande dat hij in / was.

10
10
10
2010-12-28 19:21:39 +0000

Het mdfind-commando gebruikt de Spotlight-database http://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/mdfind.1.html

6
6
6
2010-12-28 17:44:14 +0000

U kunt het locate commando gebruiken.

locate abc.dmg
3
3
3
2010-12-28 22:53:12 +0000

De eenvoudigste manier (die je vast al geprobeerd hebt, maar hé, laat me het toch aan de draad toevoegen) is om abc.dmg in te voeren in het zoekvak rechtsboven in een willekeurig venster, en dan “File Name” te selecteren uit de opties op de zoekbalk die verschijnt.

Geen noodzaak voor de terminal.

Vergeet ook niet dat Spotlight alleen directories indexeert die zijn gespecificeerd in het Spotlight controlepaneel en abc. dmg staat misschien niet in één van die mappen.

Corrigeer me als ik het mis heb, maar ik denk dat het zoek-commando moet weten wat er moet worden uitgevoerd:

find / -name abc.dmg -print

…moet alle resultaten naar de terminal afdrukken (inclusief toestemmingsfouten).

Als je geen toestemmingsfouten wilt en andere gebruikersmappen wilt doorzoeken dan:

sudo find / -name abc.dmg -print
2
2
2
2018-02-09 04:28:07 +0000

U kunt de volgende commandoregelfuncties gebruiken om snel een relevant bestand te vinden en te openen. Ik vind dit makkelijker dan het typen van een lange reeks vragen in het spotlight venster.

Voeg de volgende functies toe in ~/.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}")"

}

Nu, of source ~/.bash_aliases of open een nieuwe terminal load functies. Om te zoeken naar bestanden met woorden, taart en 2016 waar dan ook in de bestandsnaam, doe

spot pie*2016 #or
spot 2016*pie

Er is geen noodzaak om * aan uw query voor te bereiden of toe te voegen als het zoekpatroon, '*$1*' tagt al wild card entry aan het begin en einde van uw query. Extra cd is voor het geval ongevoelig en het negeren van diakritische markeringen, bijvoorbeeld, fred zal beide terugkeren, Frédéric en FrEDeric.

findpaper zal het zoeken beperken tot resultaten onder een specifiek pad (recursief) terwijl openpaper pie*201 een (of eerste van meerdere resultaten) zoekresultaat zal openen of openpaper pie*201 3 zal derde resultaatinvoer openen. Om het openen van bash scripts of andere niet-documentaire bestanden te voorkomen, kunt u de inhoud van het bestand beperken door extra zoekattributen. Zie File Metadata Query Expression Syntax en https://ss64.com/osx/mdfind.html voor het gebruik van andere zoekoperatoren.

0
0
0
2019-06-09 11:50:48 +0000

Leg een lijst van elk bestand op uw schijf vast als root van /

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

Cat het hele bestand via grep om het hele station te doorzoeken:

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

Gebruik reguliere expressies om alleen .jpg en .dmg bestanden te tonen:

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

Resultaat:

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

…etc. Helaas zullen ook alle gemonteerde schijven worden vastgelegd, dus het is het beste om de Time Machine uit te werpen die ze hebben veel links. Dus in een ander venster draai ik watch tail -n 10 ~/file-list.txt die me laat zien waar het aan toe is in mijn lafhartige hack!