Какой инструмент является наиболее гибким для поиска по всей моей системе, найти или mdfind?

Следите за Spotlight и команда locate не ищет * все * папки:

Шаги, упомянутые Гордоном Дэвиссоном, были выполнены; .bashrc был введен в поле поиска Spotlight, а системные и невидимые файлы были включены в соответствии с приведенной выше ссылкой. .bashrc файл вообще не показывался ${HOME} Пермь были изменены с 750 в 755 и прошло несколько часов, но .bashrc до сих пор не появился.

Что нужно увидеть .bashrc с Spotlight? Как дисплей Spotlight .bashrc везде, если вообще, чтобы увидеть самый последний, как в?

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

(most_recent_file скрипт на Perl, в котором stat каждого файла в списке и печатает имя самого нового):

Обратите внимание locate.updatedb Сценарий создания базы данных был изменен, чтобы позволить find искать в /etc/locate.rc указанный объем (ы) как root или же nobodyв зависимости от того root или же daemon вызывает его в соответствии с тем, какие папки индексируются / покрываются "locate"). Логика хитрая, поэтому вот комментарий для обновленного /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

Вот источник Perl для most_recent_file.pl скрипт. У нас есть символическая ссылка most_recent_file в наших путях поиска.

#!/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 ответ

Решение

Я не смог найти в центре внимания поиска Finder список.bashrc (возможно, он его находит, но не отображает, потому что он невидим?). Но интерфейс командной строки для освещения... ну, его можно убедительно показать. Это работает:

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

Но по какой-то причине -name опция не показывает это:

$ mdfind -name ".bashrc"
$

... так что я не совсем верю в это, чтобы найти то, что я думаю, что должно.

Другие вопросы по тегам