Как я могу передать файлы из grep, чтобы открыть все соответствующие файлы?
Я пробовал grep -li "type" * | open
, но это не работает.
Как я могу передать файлы из grep, чтобы открыть все соответствующие файлы?
Я пробовал grep -li "type" * | open
, но это не работает.
IFS=$'\n'; for i in $(grep -rli "type" *); do open "$i"; done
IFS необходим, чтобы не разбивать имена файлов, содержащие пробелы.
Используйте цикл чтения строки:
| while read line
Если
$ grep -l something *.py
file1.py
file2.py
затем
$ grep -l something *.py | while read line ; do open "$line" ; done
Эквивалентно
$ open "file1.py"
$ open "file2.py"
Использование кавычек типа "$line"
вместо просто $line
позволяет ему сопоставлять имена файлов, содержащие пробелы, в противном случае имена файлов с пробелами вызовут ошибки.
Обратите внимание, что line
- это просто часто используемое имя для переменной в этом использовании. Это может быть так же легко
$ grep -l something *.py | while read potato ; do open "$potato" ; done
Есть много способов сделать это (используя find/exec, xargs, ...), один из них может быть:
grep -li "type" * | while read file; do echo "processing $file"; done