Використовуйте locate
, grep
або find
в командному рядку.
Відкрийте програми> Утиліти> Термінал і будь-яке використання:
sudo locate -0 '*.txt' | xargs -0 grep WORD 2>/dev/null
Замініть СЛОВ словом, яке ви хочете шукати. Це, безумовно, найшвидший метод.
Я рекомендую спочатку відтворити базу даних locate для підвищення точності:
sudo /usr/libexec/locate.updatedb
Зауважте, що в OS X locate
база даних створюється користувачем nobody
. Це означає, що файли, приховані nobody
не, індексуються. Ви можете змінювати /usr/libexec/locate.updatedb
та коментувати (тобто префікс #
) цей розділ:
if [ "$(id -u)" = "0" ]; then
rc=0
# 2013-03-08 jaume Correct mktemp
export FCODES=`mktemp --tmpdir updatedbXXXX`
chown nobody $FCODES
tmpdb=`su -fm nobody -c "$0"` || rc=1
if [ $rc = 0 ]; then
install -m 0444 -o nobody -g wheel $FCODES /var/db/locate.database
fi
rm $FCODES
exit $rc
fi
так що він індексується під користувачем root
(це стосується OS X 10.8 (Mountain Lion), в інших версіях OS X locate
може індексувати файли по-різному).
sudo grep -R --exclude-dir '/Volumes/<OS volume>' --exclude-dir '/Volumes/MobileBackups' --exclude-dir '/.Spotlight*' --exclude-dir '/.MobileBackups' --exclude-dir '/.DocumentRevisions*' --include '*.txt' WORD / 2>/dev/null
Замініть WORD словом, яке ви хочете шукати, і <OS volume>
назвою гучності вашої ОС. Використовувані grep
варіанти:
-R
: чи здійснює рекурсивний пошук у вказаному шляху, тобто в /
. Якщо ви шукаєте резервну копію TimeCapsule, замініть /
щось подібне /Volumes/TimeCapsule
.
--exclude-dir
: виключає вказані папки. Як бачите, я виключаю Spotlight, папку Versions та локальні папки TimeMachine. Якщо ви хочете шукати локальний диск лише під час встановлення вашої TimeCapsule, додайте --exclude-dir /Volumes/TimeCapsule
.
--include '*.txt'
: вказує grep
на пошук файлів, які відповідають *.txt
.
Додатково:
2>/dev/null
: надсилає помилки, щоб /dev/null
ви їх не бачили.
sudo find / ! -path '/.Spotlight*' ! -path '/Volumes/<OS volume>/*' ! -path '/Volumes/MobileBackups/*' ! -path '/.MobileBackups/*' ! -path '/.DocumentRevisions*' -name *.txt -type f -exec grep -H WORD {} + 2>/dev/null
Знову замініть WORD словом, яке ви хочете шукати, і <OS volume>
назвою гучності вашої ОС. Як і раніше, 2>/dev/null
надсилає помилки, щоб /dev/null
ви їх не бачили, а якщо шукаєте резервну копію TimeCapsule, замініть /
щось подібне /Volumes/TimeCapsule
.
Використовувані find
варіанти:
! -path
: виключити вказані шляхи. Якщо ви хочете шукати локальний диск лише під час встановлення вашої TimeCapsule, додайте ! -path /Volumes/TimeCapsule/*
.
-name *.txt
: пошук файлів з ім'ям * .txt. Як бачите, я виключаю Spotlight, папку Versions та локальні папки TimeMachine.
-type f
: пошук лише у файлах, ігнорування символьних посилань, папок тощо.
grep -H WORD {}
: grep-файл для WORD. -H
змушує grep
друкувати ім'я файлу.
Вихід будь-якої з команд, наведених вище, виглядає так:
filename: matched line
Наприклад, під час пошуку "GNU":
/usr/local/share/doc/p7zip/DOCS/readme.txt:7-Zip is free software distributed under the GNU LGPL
/usr/local/share/doc/p7zip/DOCS/readme.txt:1) You can compile and use compiled files under GNU LGPL rules, since
/usr/local/share/doc/p7zip/DOCS/readme.txt: copying.txt - GNU LGPL license
/usr/local/share/doc/xz/history.txt: Alexandre Sauvé helped converting the build system to use GNU
Якщо ви хочете зробити пошук без урахування регістру, замініть grep
з grep -i
вище.
find
не дотримується символічних посилань (хоча він буде проходити через інші томи, якщо не вказати-x
варіант) ...