Linux grep или находит использование

Как я нахожу файл на своем жестком диске, с которого запускается io_file?

Я попробовал:

grep -r io_file*` 

и

find -name io_file*

find ничего не возвратил тогда как grep кажется, берет возрасты без любых результатов.

Что я делаю неправильно?

4
задан 06.04.2012, 17:57

8 ответов

find / -name 'io_file*'

Первый параметр укажет, где поиск должен запуститься. / означает Ваш весь жесткий диск. Для поиска только в текущем каталоге (и подкаталоги) используйте: find .

Строка поиска должна быть заключена в кавычки, если она содержит метасимвол оболочки, такой как звездочка. Иначе это будет проанализировано оболочкой и никогда не замечаться find.

11
ответ дан 07.12.2019, 19:05
  • 1
    . Строка поиска будет только расширена, если будет соответствие, иначе это оставляют нерасширенным. Попробуйте "эхо thisisnotafile*", например. – JesperE 11.08.2009, 22:48
  • 2
    Jesper: то зависимое от оболочки поведение? Терминал я работаю от использования tcsh и заключаю в кавычки, имеет значение даже для имен файлов, которые не расширяемы. –  11.08.2009, 22:58
  • 3
    Спасибо за это. И как я могу сказать, что хочу взгляд в текущем каталоге, А ТАКЖЕ всех подкаталогах? –  11.08.2009, 23:00
  • 4
    Просто изменитесь '/' для'.' (без кавычек) (Снова, не плакат) –  11.08.2009, 23:16
  • 5
    @John: действительно, удар и tcsh имеют другое поведение. – Bastien Léonard 12.08.2009, 02:09
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 печатает согласующие отрезки длинной линии.

найдите - ищут файлы в иерархии каталогов

7
ответ дан 07.12.2019, 19:05
  • 1
    шаблон имени не забывает включать шаблон в кавычки для защиты его от расширения оболочкой. –  11.08.2009, 22:51
  • 2
    , который это из страницы справочника –  11.08.2009, 22:51

IMO, находка использования является медленной для всего поиска жесткого диска (это также покажет Вам много ошибок разрешения при доступе к файлам, которыми Вы не владеете). Если возможно, использование найдите:

locate -b 'io_file*'

Необходимо будет, вероятно, повторно индексировать, если файл является более новым, чем 24-й (обычно, он устанавливает ежедневную газету cronjob):

sudo updatedb
4
ответ дан 07.12.2019, 19:05
find / -name 'io_file*'
2
ответ дан 07.12.2019, 19:05

Команда

# 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
2
ответ дан 07.12.2019, 19:05

Оболочка разворачивает подстановочные знаки и передает результат grep, таким образом, необходимо или выйти * или кавычки использования:

find / -name io_file\*
find / -name 'io_file*'
find / -name "io_file*"

Все три из них делают то же самое на моем поле Linux.

0
ответ дан 07.12.2019, 19:05

find -name io_file* будет искать в текущем каталоге и ниже только. Если Вы хотите искать весь жесткий диск, необходимо указать путь: find / -name io_file*. То же самое идет с grep -r; это будет только искать в текущем каталоге и ниже.

find утилита очень удобна, но это может быть немного парадоксально для использования. Моя рекомендация состоит в том, что Вы читаете страницу справочника находки (man find), это определенно стоит инвестированного времени.

0
ответ дан 07.12.2019, 19:05

Поскольку Вы не дали grep файл, он воздействует на стандартный вход и ожидает Вас для ввода чего-то. Это - неправильная команда так или иначе. Что касается находки Вам нужен каталог, чтобы начать с и иметь для помещения io_file* в кавычках иначе это расширено оболочкой:

find / -name "io_file*"

Можно также использовать locate "io_file*" который быстрее, но может быть неточным.

0
ответ дан 07.12.2019, 19:05

Теги

Похожие вопросы