Команда find
действительно полезна для идентификации файлов с заданным именем, которые также содержат строку где-то внутри себя.
Например, скажем, я ищу строку "pacf("
в файле уценки R где-то в моем текущем каталоге.
find . -name "*.Rmd" -exec grep -ls "pacf(" {} \;
Я получаю полезные результаты.
Однако иногда я не уверен, является ли файл, который я ищу, файлом .R или файлом .Rmd, поэтому я также могу запустить.
find . -name "*.R" -exec grep -ls "pacf(" {} \;
И скажем, нет файлов R, содержащих эту строку, поэтому ничего не возвращается.
Одна мысль, которую я хотел бы сделать, это найти эту строку в файлах .R
и .Rmd
. я бы подумал, что я мог бы бежать
find . -name "*.Rmd" -o -name "*.R" -exec grep -ls "pacf(" {} \
Но это не дает никаких результатов.
Однако, если я бегу
find . -name "*.R" -o -name "*.Rmd" -exec grep -ls "pacf(" {} \
Я получаю те же результаты, что и при поиске файлов .Rmd
. Таким образом, похоже, что он запускает материал в exec только для второго набора файлов.
Могу ли я изменить эти команды для одновременного просмотра файлов .R
и .Rmd
?
вы можете передать "*[.Rmd]"
вместо -name
как это
find . -name "*[.Rmd]" -exec grep -ls "pacf(" {} \;
Добавьте скобки '()'
find . \( -name '*.R' -o -name '*.Rmd' \) -exec grep -ls "pacf(" {} \;