Одна з моїх улюблених команд BASH:
find . -name '*.*' -exec grep 'SearchString' {} /dev/null \;
який здійснює пошук вмісту всіх файлів у поточному каталозі та під ним для вказаного SearchString. Як розробник, це корисно часом.
Однак, завдяки моєму поточному проекту та структурі моєї кодової бази, я хотів би зробити цю команду BASH ще більш вдосконаленою, не шукаючи жодних файлів, що знаходяться в каталозі, що знаходиться в ньому або нижче, або "будь-яких файлів, що містять" .svn " закінчується ".html"
Сторінка MAN для пошуку свого роду збентежила мене. Я спробував використовувати -prune, і це викликало дивну поведінку. Намагаючись пропустити лише сторінки .html (для початку), я спробував:
find . -wholename './*.html' -prune -exec grep 'SearchString' {} /dev/null \;
і не отримав тієї поведінки, на яку я сподівався. Я думаю, що я, можливо, пропускаю точку -пріну. Ви можете мені допомогти?
Дякую
grep -rl 'SearchString'
find
для пошуку всередині файлу.
-name '*.*'
не знайде всіх файлів: лише ті, у кого .
їх ім'я ( *.*
як правило, це DOS-ism, тоді як в Unix ви зазвичай використовуєте саме *
для цього). Для того, щоб дійсно відповідати їх все, просто видаліть аргумент взагалі: find . -exec ...
. Або якщо ви хочете застосувати grep лише до файлів (і пропустити каталоги), тоді це зробити find . -type f -exec ...
.
find
це не команда bash, що