Найти все файлы с определенными расширениями, которые содержат строку

Я хотел бы знать, как я могу найти все файлы, расширение которых может быть .xml и .py, которые содержат строку «Jason» под путем «./» рекурсивно?

Или как Могу ли я исключить .po из поиска?

6
задан 2 July 2016 в 17:04

6 ответов

Попробуйте следующую команду. Это будет искать только в .xml и .py файлы для Вашего имени:

find . -type f \( -iname \*.xml -o -iname \*.py \) | xargs grep "Jason"

Hope это помогает!

3
ответ дан 3 July 2016 в 03:04
  • 1
    Привет - это все еще не работает даже с крошечной установкой - теперь помещает меня прямо в TTY1 на начальной загрузке, что когда-либо я делаю. – ys99x 2 January 2017 в 09:36

Можно сделать это с grep только (без использования, находят):

grep --include=\*.{xml,py} -Rl ./ -e "Jason"

И исключить .po:

grep --exclude=*.po --include=\*.{xml,py} -Rl ./ -e "Jason"
9
ответ дан 3 July 2016 в 03:04
  • 1
    Linux растет все время. Часть причины - то, что драйверы добавляются для новых аппаратных средств, и веб-браузеры сделаны способными считать новые веб-страницы. Часть причины, вероятно, что это получает ' bloated' в целом. – sudodus 19 December 2016 в 03:21

Это может быть сделано с объединением 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' {} + 
1
ответ дан 3 July 2016 в 03:04
  • 1
    Опишите то, что Вы сделали! - Вы устанавливали lubuntu-ядро? – sudodus 2 January 2017 в 09:45

Как я понимаю от Вашего вопроса выше, u должен показать все файлы со строкой "Jason" в. Так, может быть, это может помочь Вам:

find . -type f \( -name "*.xml" -o -name "*.py" \) | grep -r "Jason" | cut -d':' -f1 | uniq
0
ответ дан 3 July 2016 в 03:04
  • 1
    Спасибо за информацию, ianorlin. Текущая версия (0.19.12.1) MPD имеет ошибку, посредством чего она запирается. Музыка застревает и повторяет 1/5 (или так), второй блок, отчасти как старый CD мог сделать время от времени, и также, безотносительно клиента я использую, в то время освобождает контакт с MPD. Я могу перезапустить клиент, снова соединиться с MPD, сказать ему приостанавливаться, затем играть, и он продолжается для другого в то время как, возможно, день. Новейшая версия (19.21) утверждает, что исправила ту ошибку. Я собираюсь пробовать, тогда я возвращусь сюда и отправлю свои результаты. – Cool Javelin 19 December 2016 в 10:30

Лучшее решение, вероятно, уже не было дано никем, однако когда инструмент не поддерживает поиск каталога рекурсивно для имен файлов, можно включить 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
0
ответ дан 3 July 2016 в 03:04
  • 1
    Я попробовал это. Это не работает. Что-то о состоянии пакета, являющемся наполовину установленным, обнаруживается – Vishesh Dembla 19 December 2016 в 00:07

Вы могли сделать это:

grep -r "Jason" ./ | grep .xml; grep -r "Jason" ./ | grep .py

, Который отобразит вывод любых файлов, содержащих Jason, и ограничит его именами файлов, содержащими .xml или .py.

, Если Вы хотите просто исключить .po, затем попробуйте это:

grep -r "Jason" | grep -v .po
0
ответ дан 3 July 2016 в 03:04
  • 1
    Я попробовал минимальную установку и много маленьких дистрибутивов Linux без успеха. Начальная загрузка от Независимого CD, работавшего отказавший. Я думаю, что SSD имеет поврежденные секторы. MKUSB является превосходным, и он делает создание персистентного диска очень легким. Я установил Мяту 7 на SD-карте с помощью созданного в слоте платы - и был удовлетворен, что после завершения работы он помнил пароль беспроводной сети, и FoxtrotGPS, добавленный Синаптическим, был там после перезагрузки. надо надеяться, это даст тем со старым Asus EEEpc 2 или 4G возрождение надежд, не обращаясь к аппаратному взлому для обновления зашитого SSD. – ys99x 15 April 2017 в 23:08

Другие вопросы по тегам:

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