Какой смысл иметь звездочки до и после поискового запроса здесь?
find ~ -name "*bash*"
До сих пор я узнал, что звездочка означает найти ноль или более символов предыдущего символа, так как что применимо в этой команде, или здесь все по-другому?
Без этого вы просите найти для поиска в вашем каталоге $ HOME (~) файлы с именем "bash"; символы * допускают что-то | до и после «bash», что отличается от «bash».
find ~ -name "bash"
найдет файл с именем "bash", а не my_bash_script
. Символ * до и после 'bash' меняет значение и позволяет ему найти файл с именами bash
и my_bash_script
,
Что вы называете нулем или более символами, так это регулярное выражение - это расширенное сопоставление с шаблоном, используемое такими инструментами, как grep
и awk
.
В команде у вас звездочка (*
) означает любой символ. Флаг -name
просматривает только имена файлов при выполнении этого соответствия.
Тильда (~
) обозначает домашний каталог пользователя, и обратите внимание, что команда find не знает, если. Когда команда вызывается, оболочка выполнит замену, и вместо этого команда увидит что-то вроде /home/jdoe
.
Теперь find
(будучи рекурсивной командой) будет проходить /home/jdoe
(обозначено ~
) и каждый подкаталог домашнего каталога, соответствующий любому файлу, в котором есть слово bash
, так что соответствующие файлы будет ~/.bashrc
или ~/.bashrc-local
или даже ~/Pictures/wabash_2019.png
Теперь, если вы хотите использовать регулярное выражение, это будет обработано флагом -regex
, где этот шаблон будет означать что-то еще полностью и, вероятно, победит ' не производит никакого выхода. Я не буду вдаваться в подробности регулярных выражений, потому что есть целые книги на эту тему. В этом случае регулярное выражение используется для очень простого сопоставления с образцом.