find $MYUSR -type f -print0 | xargs -0 -n 10 grep -i -l 'this table...'
Варианты для find
:
-type f
- мы не хотим искать каталоги (только файлы в них), устройства и т. д.
-print0
- мы хотим иметь возможность обрабатывать имена файлов, содержащие пробелы
Варианты к xargs
являются
-0
- из-за поиска -print0
-n 10
- запускать grep для 10 файлов одновременно (полезно, когда не используется grep -l
)
Варианты grep:
-i
- игнорировать регистр
-l
- просто перечислить имена файлов (не все совпадающие строки)
-f
- трактовать точки в поисковом выражении как обычные старые точки.
Для запуска в текущем каталоге замените $MYUSR
на .
Обновление (один из суперпользователей предложил find -type f -exec grep -i "this table..." +
)
$ ls -1
2011
2011 East
2011 North
2011 South
2012
$ find -type f -exec grep -i 'this table...'
find: missing argument to `-exec'
$ find -type f -exec grep -i 'this table...' +
find: missing argument to `-exec'
$ find -type f -exec grep -i 'this table...' {} \;
this table... is heavy
THIS TABLE... is important
this table... is mine
this table... is all alike
this table... is twisty
Но это не полезно, вы хотите имена файлов
$ find -type f -exec grep -i -l 'this table...' {} \;
./2011 East
./2011
./2011 North
./2011 South
./2012
Хорошо, но часто вы хотите видеть содержимое соответствующей строки
Если вы хотите, чтобы имена файлов И соответствовали содержанию строки, я делаю это следующим образом:
$ find -type f -print0 | xargs -0 -n 10 grep -i 'this table...';
./2011 East:this table... is heavy
./2011:THIS TABLE... is important
./2011 North:this table... is mine
./2011 South:this table... is all alike
./2012:this table... is twisty
Но без "старого skool" -print0
и -0
вы получите беспорядок
$ find -type f | xargs -n 10 grep -i 'this table...';
./2011:THIS TABLE... is important
grep: East: No such file or directory
./2011:THIS TABLE... is important
./2011:THIS TABLE... is important
grep: North: No such file or directory
./2011:THIS TABLE... is important
grep: South: No such file or directory
./2012:this table... is twisty