Welches Tool ist am flexibelsten, um mein gesamtes System zu durchsuchen, zu lokalisieren oder mdfind zu suchen?

882
Billy McCloskey

Follow-on zu Spotlight und der Befehl locate durchsuchen nicht alle * Ordner :

Die von Gordon Davisson erwähnten Schritte wurden ausgeführt; .bashrcwurde in das Spotlight-Suchfeld eingegeben, und System- und Invisible-Dateien wurden wie oben beschrieben aktiviert. Die .bashrcDatei wurde überhaupt nicht angezeigt. Die $Perm wurden geändert von 750auf 755und mehrere Stunden vergangen, aber .bashrcnoch nicht erschienen.

Was ist erforderlich, um .bashrcmit Spotlight zu sehen ? Wie kann Spotlight .bashrc, wenn überhaupt, das neueste anzeigen, wie in?:

me@My-MacBook-Pro ~ $ locate .bashrc | most_recent_file /Users/me/.bashrc 

( most_recent_fileist ein Perl-Skript, in dem stat jede Datei in einer Liste speichert und den Namen der neuesten Datei ausgibt):

Hinweis: Das locate.updatedbDatenbankerstellungsskript wurde geändert, damit find die /etc/locate.rcangegebenen Volumes nach rootoder nach durchsuchen kann nobody, je nachdem, ob rootoder wie es daemonaufgerufen wird (nach Welche Ordner werden durch "locate" indiziert / abgedeckt ). Die Logik ist knifflig, also hier der Kommentar zum aktualisierten /usr/libexec/locate.updatedb:

# Modify test for expected invocations by either daemon (id=1) or root (id=0); # if invoked as root, skip test section and search filesystems as root as per # /etc/locate.rc, a possible security risk if /etc/locate.rc is not tailored # for production use. Invoked as daemon, we "spawn" ourselves as nobody to # gain nobody's filesystem visability, rather than daemon's. #if [ "$(id -u)" = "0" ]; then if [ "$(id -u)" = "1" ]; then 

Hier ist die Perl-Quelle für das most_recent_file.plSkript. Wir haben einen symbolischen Link most_recent_filein unseren Suchpfaden.

#!/usr/bin/perl -wnl # From pathname inputs, emits name of one most recently modified # Gives correct answer where pipelines of this form may not: # find . -print | xargs ls –lrdt | tail -1  # NOTE: Use find or locate to provide input, or ls -d dir/*, # but *not* simply "ls dir" (dir won't be present in pathname)  # Sample invocations: # locate '*.c' | most_recent_file # ls -d /etc/* | most_recent_file # find /local -name 'somescript' | most_recent_file # most_recent_file < filelist  BEGIN { $newest = 0; # initialize modification-time reference point $name = ""; }  # Get file's numeric modification time; 10th value from stat $mtime = ( stat $_ )[9]; # indexing into output of stat if ( $mtime > $newest ) { # if True, current file is newest yet seen  # Remember mod-time for comparison to others, # and remember filename for final report $newest = $mtime; $name = $_; }  END { print $name; } 
1

1 Antwort auf die Frage

3
Gordon Davisson

Ich konnte die Spotlight-Suche des Finder auch nicht zur Auflistung von .bashrc veranlassen (vielleicht wird sie gefunden, aber nicht angezeigt, weil sie unsichtbar ist?). Aber das Kommandozeilen-Interface zum Scheinwerfer ... na ja, man kann es überzeugen, es zu zeigen. Das funktioniert:

$ mdfind kMDItemFSName = ".bashrc" /Users/gordon/.bashrc 

Aber aus irgendeinem Grund zeigt die -nameOption es nicht:

$ mdfind -name ".bashrc" $ 

... also vertraue ich nicht völlig darauf, das zu finden, was ich denke, dass es sollte.

Ich habe das Finder-Attribut AppleShowAllFiles in true geändert. Ich habe auch das Kind-Attribut "Sichtbarkeit" des Sichtbereichs auf "Sichtbar" oder "Unsichtbar" gesetzt. Keine davon liefert eine sichtbare, unsichtbare Datei wie .bashrc. Billy McCloskey vor 10 Jahren 0
Scheint nicht mehr mit macOS Sierra (10.12) zu funktionieren. Norswap vor 7 Jahren 1