Я пытаюсь найти определенную строку во всех папках в корневом каталоге с расширением .cs. Однако в некоторых папках есть пробелы, поэтому моя команда grep не работает.
Просмотрел другие сообщения, но не смог найти точного ответа. Есть ли более эффективный способ выполнить этот поиск?
Интересно, что я могу сделать, чтобы избежать этого пространства внутри папки или имени файла.
find . -name \*.cs -print | xargs grep -win "Test String" > TesString.log
Папка с пробелом в моем корне -
D:\TestDrive\C Sharp\Batch\MyCode
Ошибка в grep
grep: ./TestDrive/C: Is a directory
grep: Sharp/Batch/MyCode/Program.cs: No such file or directory





Вы можете использовать рекурсивный grep вместо find | xargs grep ..:
grep -winr 'Test String' --include=*.cs .
Для вашей команды вам нужно использовать -print0 и xargs -0, чтобы find выводил имена файлов с нулевым завершением:
find . -name '*.cs' -print0 | xargs -0 grep -win "Test String" > TesString.log
В качестве альтернативы вы можете использовать опцию -exec в самом find:
find . -name '*.cs' -exec grep -win "Test String" {} + > TesString.log
Это показывает все файлы, но когда я запускаю его с помощью команды grep, он не находит файл - нет вывода
Да, у меня есть файл с «Тестовой строкой». Я тоже проверил выходной файл, но в него тоже ничего не записывается.
Он отлично работает для меня. Попробуйте: grep -winr 'Test String' --include=*.cs .
этот последний, кажется, работает, но он не печатает номер строки вхождения.
Неважно - я не смотрел внимательно. он печатает номер строки. Но неужели это самый эффективный способ поиска в тысячах файлов?
Да, почему бы и нет. Он ищет один файл за раз, поэтому не будет запускать несколько процессов или потоков.
Спасибо за помощь @Anubhava. Ценить это.
Спасибо @anubhava, но он не может искать файлы с расширением .cs.