Як знайти файл на своєму жорсткому диску, який починається з io_file?
Я намагався:
grep -r io_file*`
і
find -name io_file*
findнічого не повернуло, тоді як, grepздається, проходять віки без жодних результатів.
Що я роблю неправильно?
Як знайти файл на своєму жорсткому диску, який починається з io_file?
Я намагався:
grep -r io_file*`
і
find -name io_file*
findнічого не повернуло, тоді як, grepздається, проходять віки без жодних результатів.
Що я роблю неправильно?
Відповіді:
find / -name 'io_file*'
Перший параметр вкаже, з чого слід починати пошук. /означає весь ваш жорсткий диск. Для пошуку лише в поточному каталозі (і підкаталогах) використовуйте:find .
Рядок пошуку повинен бути цитований, якщо він містить метахарактер оболонки, наприклад зірочку. В іншому випадку вона буде розібрана оболонкою і ніколи не побачиться find.
find / -name 'io_file*' -type f 2>/dev/null
/: Start looking from root directory
-type f: Only search for regular files
2>/dev/null: Redirect errors to /dev/null. (handy if you are not root and
not interested in all the "access denied" messages)
Майте на увазі, що grep and find робіть різні речі.
grep шукає названі вхідні ФАЙЛИ (або стандартне введення, якщо файли не названі, або ім'я файлу - вказано) для рядків, що містять відповідність даному ПАТЕРНУ. За замовчуванням grep друкує відповідні рядки.
find - пошук файлів в ієрархії каталогів
IMO, використання пошуку повільно для всього пошуку жорсткого диска (це також покаже вам багато помилок у дозволі під час доступу до файлів, якими ви не володієте). Якщо можливо, використовуйте locate:
locate -b 'io_file*'
Ймовірно, вам доведеться повторно індексувати, якщо файл новіший за 24 години (зазвичай він встановлює щоденну роботу):
sudo updatedb
Команда
# set -x
буде друкувати команди після розширення оболонки, щоб ви могли бачити, що відбувається
# find . -name letter.*
+ find . -name letter.rtf
... і тепер ви бачите, що оболонка розширює аргумент на ім'я letter.rtf, оскільки мій поточний довідник містить файл, який називається, letter.rtfщо відповідає шаблону.
Котирування шаблону (подвійні лапки також працюють у цьому випадку) зупинить розширення оболонки
# find . -name 'letter.*'
+ find . -name 'letter.*'
Щоб вимкнути його, використовуйте
# set +x
Ви також можете використовувати -xв рядку shebang, щоб побачити, які сценарії оболонки роблять, що може значно полегшити налагодження.
#!/bin/bash -x
Оболонка розширює підстановку та передає результат на вимикання, тому вам потрібно або вийти з *лапки, або використовувати лапки:
find / -name io_file\*
find / -name 'io_file*'
find / -name "io_file*"
Усі троє роблять те саме, що і в моєму вікні Linux.
find -name io_file*буде шукати лише в поточному каталозі та нижче. Якщо ви хочете знайти весь жорсткий диск, необхідно вказати шлях: find / -name io_file*. Те ж саме йде і з grep -r; він буде шукати лише в поточному каталозі та нижче.
findУтиліта дуже зручна, але вона може бути трохи нелогічним використовувати. Моя рекомендація полягає в тому, щоб ви прочитали man-сторінку пошуку ( man find), це вартує вкладеного часу.
Оскільки ви не дали файлу grep , він працює на стандартному вході та чекає, коли ви щось введете. Це все-таки неправильна команда. Щодо знаходження, вам потрібен каталог, з якого потрібно починати, і потрібно ставити io_file*лапки, інакше він розширюється оболонкою:
find / -name "io_file*"
Ви також можете використовувати те, locate "io_file*"що швидше, але може бути неточним.