Есть в *nix системах замечательное понятие скрытых файлов и папок, это все те, имена, которых начинаются с . (точки). От кого же они скрыты? От lsи ВСЕ! И как же быть если и grep и find их видит? И так я хочу что бы по-честному grep не искал в скрытых файлах и в файлах, которые находтся в скрытых папках. Зачем мне это нужно: а есть у меня прокет - много-много папочек, целое деревце, и проект я забирала из svn и в каждой папочке имею подпапочку с именем .svn. Когда я ищу что-то по проекту, grep проходит и через них. таким образом дублирую как бы результать поиска - не удобно. особенно, если много. Кроме того у меня grep версии 2.5.чего-то там и у него нет ключа -exclude-dir.
И так сама я решение не нашла, хотя былда близка мне помогли :) , но что бы его не забыть ВОТ ОНО!
find где_искать -type f -not -path '*/.*' -exec grep -Hn что_искать '{}' \;
Но! у решения есть один недостаток файлы в коре "где_искать" он не обрабатывает. правда мне не критично. :)
-Hn - это что бы показывало путь к файлу и номер строки - нужно если искать в emacs.
Кто подскажет еще изящные способы решения проблемы :) буду благодарна.
«Долго мы искали, долго мы искали,
(обошли деревни, сёла, города)
мальчика, который любит чистить зубы
и девочку, которая не плачет никогда…»
«Долго мы искали, долго мы искали,
и вдруг мы отыскали без всякого труда,
девочку, которая любит чистить зубы,
и мальчика, который не плачет никогда».
(С) Олег Супруненко
--exclude=FILE_PATTERN пропускать файлы и директории, совпадающие с FILE_PATTERN
ОтветитьУдалить--exclude-from=FILE пропускать файлы, совпадающие с любым из шаблонов из файла FILE
--exclude-dir=PATTERN директории, совпадающие с PATTERN которые были пропущены.
Все три ключа отсутствуют? В моём есть:
evgeny@evgeny-desktop:~$ grep --version
GNU grep 2.5.3
а скрытые файлы скрыты только от человека. не только ls но и всякие KDE/GNOME их могут не показывать. впрочем я всегда влючаю показывать. Обычно мне нужно как раз куда-то в скрытое место. :)
ОтветитьУдалитьДа, вот тебе второе решение. Так сказать влоб:
grep -R some my/path/|grep -v /.svn/
Хотелось универсальный для всех скрытых файлов (причем и в корне тоже, чего я так и не добиалсь :( ) Кроме того, мне кажется при обработки больших объемов данных при этом варианте будут сильные тормоза. разве нет ?
ОтветитьУдалитьтак же можно думаю найти еще и дургие побочные действия такого подхода.
Хочу найти лучше и проще вариант. пока не нашла
про корень не понял. У меня ищет везде где скажешь.
ОтветитьУдалитьА find самый правильный вариант. особенно когда не хватает мощи других утилит. Ты вообще покажи версии своих, что-то они у тебя все странные какие-то.
evgeny@evgeny-desktop:~$ find --version
find (GNU findutils) 4.4.0
find 4.1.7.
ОтветитьУдалитьВерсии увы от меня не зависят :(
Хоть GNU?
ОтветитьУдалить2001-05-20 Kevin Dalley /kevin@seti.org/
* Version 4.1.7
Круглую дату пропустили: 8 лет! :)
Сейчас актуальная 4.5.4 Я changelog почитал, изменений не много, в основном с локализацией, оптимизацией, и прочими мелочами. Но всё равно обидно на такой устаревшей версии работать. И помочь сложно, если поведение нюансами отличается. Хотя утилита известна со времён первых юниксов. То есть с начала 7х. И всё что нужно всегда ей искали. Ты ещё раз опиши, что должна делать команда, особенно про корень не понял. Возможно ты про . говоришь, а она подпадает под маску .* Хотя у меня всё и везде ищется и так...
10 советов по использованию утилиты GNU Find
ОтветитьУдалитьhttp://rus-linux.net/nlib.php?name=/MyLDP/consol/find.html