Я хотел бы знать, как я могу найти все файлы, расширение которых может быть .xml
и .py
, которые содержат строку «Jason» под путем «./» рекурсивно?
Или как Могу ли я исключить .po
из поиска?
Попробуйте следующую команду. Это будет искать только в .xml
и .py
файлы для Вашего имени:
find . -type f \( -iname \*.xml -o -iname \*.py \) | xargs grep "Jason"
Hope это помогает!
Можно сделать это с grep только (без использования, находят):
grep --include=\*.{xml,py} -Rl ./ -e "Jason"
И исключить .po:
grep --exclude=*.po --include=\*.{xml,py} -Rl ./ -e "Jason"
Это может быть сделано с объединением find
и grep
. Вот маленькая демонстрация - у меня есть тестовый каталог с 6 txt и rtf файлами, два из которых содержат, представляют "Jason" в виде строки.
CURRENT DIR:[/home/xieerqi/testdir]
$ find . -type f \( -iname "*.txt" -o -iname "*.rtf" \) -exec grep -iR 'jason' {} +
./foo1.txt:Jason
./bar1.txt:Jason
CURRENT DIR:[/home/xieerqi/testdir]
$ ls
bar1.rtf bar1.txt bar2.rtf bar2.txt foo1.rtf foo1.txt foo2.rtf foo2.txt
CURRENT DIR:[/home/xieerqi/testdir]
$ find . -type f \( -iname "*.txt" -o -iname "*.rtf" \) -exec grep -iR 'jason' {} +
./foo1.txt:Jason
./bar1.txt:Jason
Мы находим все файлы с txt и rtf расширениями здесь и даем им всем как параметры к grep. .
средства ищут в текущем каталоге, но Вы могли указать, что другой путь и find
будет убывать в тот каталог и подкаталоги, для поиска рекурсивно.
расширения Замены с Вашим, окончательный ответ
find . -type f \( -iname "*.xml" -o -iname "*.py" \) -exec grep -iR 'jason' {} +
Как я понимаю от Вашего вопроса выше, u должен показать все файлы со строкой "Jason" в. Так, может быть, это может помочь Вам:
find . -type f \( -name "*.xml" -o -name "*.py" \) | grep -r "Jason" | cut -d':' -f1 | uniq
Лучшее решение, вероятно, уже не было дано никем, однако когда инструмент не поддерживает поиск каталога рекурсивно для имен файлов, можно включить globstar
опция bash
и выполнить рекурсивный globbing:
shopt -s globstar; grep -F -l Jason **/*.{xml,py}
user@user-X550CL:~/tmp$ tree -a
.
└── dir1
└── dir
├── containing_Jason.py
├── containing_Jason.txt
├── containing_Jason.xml
├── not_containing_Jason.py
├── not_containing_Jason.txt
└── not_containing_Jason.xml
2 directories, 6 files
user@user-X550CL:~/tmp$ shopt -s globstar
user@user-X550CL:~/tmp$ grep -F -l Jason **/*.{xml,py}
dir1/dir/containing_Jason.xml
dir1/dir/containing_Jason.py
эквивалентная опция в zsh
активирована по умолчанию:
grep -F -l Jason **/*.{xml,py}
user@user-X550CL ~/tmp % tree -a
.
└── dir1
└── dir
├── containing_Jason.py
├── containing_Jason.txt
├── containing_Jason.xml
├── not_containing_Jason.py
├── not_containing_Jason.txt
└── not_containing_Jason.xml
2 directories, 6 files
user@user-X550CL ~/tmp % grep -F -l Jason **/*.{xml,py}
dir1/dir/containing_Jason.xml
dir1/dir/containing_Jason.py
Вы могли сделать это:
grep -r "Jason" ./ | grep .xml; grep -r "Jason" ./ | grep .py
, Который отобразит вывод любых файлов, содержащих Jason
, и ограничит его именами файлов, содержащими .xml
или .py
.
, Если Вы хотите просто исключить .po
, затем попробуйте это:
grep -r "Jason" | grep -v .po