Как я нахожу файл на своем жестком диске, с которого запускается 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 и находят, делают разные вещи.
grep ищет именованные входные ФАЙЛЫ (или стандартный вход, если никакие файлы не называют, или имя файла - дано) для строк, содержащих соответствие к данному ШАБЛОНУ. По умолчанию grep печатает согласующие отрезки длинной линии.
найдите - ищут файлы в иерархии каталогов
IMO, находка использования является медленной для всего поиска жесткого диска (это также покажет Вам много ошибок разрешения при доступе к файлам, которыми Вы не владеете). Если возможно, использование найдите:
locate -b 'io_file*'
Необходимо будет, вероятно, повторно индексировать, если файл является более новым, чем 24-й (обычно, он устанавливает ежедневную газету cronjob):
sudo updatedb
Команда
# set -x
распечатает команды после расширения оболочки, таким образом, Вы видите то, что продолжается
# find . -name letter.*
+ find . -name letter.rtf
... и теперь Вы видите, что оболочка разворачивает аргумент для именования в letter.rtf
, поскольку мой текущий каталог содержит названный файл letter.rtf
это соответствует шаблону.
Заключение в кавычки шаблона (работа двойных кавычек в этом случае также) остановит расширение оболочки
# find . -name 'letter.*'
+ find . -name 'letter.*'
Для выключения его использовать
# set +x
Можно также использовать -x
на строке хижины для наблюдения то, что делают сценарии оболочки, который может значительно помочь отладке.
#!/bin/bash -x
Оболочка разворачивает подстановочные знаки и передает результат grep, таким образом, необходимо или выйти *
или кавычки использования:
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 find
), это определенно стоит инвестированного времени.
Поскольку Вы не дали grep файл, он воздействует на стандартный вход и ожидает Вас для ввода чего-то. Это - неправильная команда так или иначе. Что касается находки Вам нужен каталог, чтобы начать с и иметь для помещения io_file*
в кавычках иначе это расширено оболочкой:
find / -name "io_file*"
Можно также использовать locate "io_file*"
который быстрее, но может быть неточным.