Ответ 1
Мои предпочтения:
find . -name '*.jpg' -o -name '*.png' -print | grep Robert
Я пытаюсь найти файлы с определенными расширениями. Например, я хочу найти все файлы .pdf и .jpg с именем Robert
Я знаю, что могу выполнить эту команду
$ find . -name '*.h' -o -name '*.cpp'
но мне нужно указать имя самого файла, кроме расширений. Я просто хочу посмотреть, есть ли возможный способ избежать записи имени файла снова и снова Спасибо!
Мои предпочтения:
find . -name '*.jpg' -o -name '*.png' -print | grep Robert
Использование аргумента find
-regex
:
find . -regex '.*/Robert\.\(h\|cpp\)$'
Или просто используя -name
:
find . -name 'Robert.*' -a \( -name '*.cpp' -o -name '*.h' \)
Этот q/a показывает, как использовать find с регулярным выражением: Как использовать регулярное выражение с командой find?
Шаблон может быть чем-то вроде
'^Robert\\.\\(h|cgg\\)$'
find -name "*Robert*" \( -name "*.pdf" -o -name "*.jpg" \)
-o
представляет условие OR
, и вы можете добавить столько, сколько хотите в фигурных скобках. Таким образом, это говорит о том, чтобы найти все файлы, содержащие слово "Роберт", в любом месте их имен и имена которых заканчиваются либо "pdf", либо "jpg".
В качестве альтернативы использованию опции -regex
на find
, так как вопрос помечен bash, вы можете использовать механизм расширения скобки:
eval find . -false "-o -name Robert".{jpg,pdf}
Как script вы можете использовать:
find "${2:-.}" -iregex ".*${1:-Robert}\.\(h\|cpp\)$" -print
findcc
и использовать его как
findcc [name] [[search_direcory]]
например.
findcc # default name 'Robert' and directory .
findcc Joe # default directory '.'
findcc Joe /somewhere # no defaults
Заметьте, что вы не можете использовать
findcc /some/where #eg without the name...
также можно использовать
find "$1" -print | grep "[email protected]"
и
findcc directory grep_options
как
findcc . -P '/Robert\.(h|cpp)$'