Найти все сценарии с заданной строкой shebang с помощью find & sed

Использование очень упрощенного сценария expect :

spawn umake ide eclipse
expect "Choose installation path:" { sleep 1; send "\r" }

Запуск:

$ expect -f script.expect
1
02.04.2017, 11:52
4 ответа

Если у вас есть GNU grep

grep -rIzl '^#![[:blank:]]*/bin/sh' ./
4
27.01.2020, 23:34

Если вас не волнует, какая строка #! / Bin / sh встречается в файле, то вы можете попробовать:

find -type f -exec bash -c 'grep - r "^ #!. * \ / bin \ / sh" $ 1 1> / dev / null && echo $ 1 '_ {} \;

0
27.01.2020, 23:34
for f in ./*; do
   [ -f "$f" ] && [ -x "$f" ] &&
      file -b "$f" | grep -wq text &&
         head -n 1 "$f" | grep -qP '^#!\s*/bin/sh' &&
            printf '%s\n' "$f"
done
0
27.01.2020, 23:34

Я объединил несколько ответов в свою версию:

find -type f -exec \
  sh -c 'head -n1 "$1" | grep -q "^#![[:blank:]]*/bin/sh"' _ {} \; \
  -print
  • Взято из нейрона, он использует find -type f -execдля получения всех файлов и выполнения над ними команды.
  • Взято у пользователя 218374, он использует head -n1для получения только первой строки и использует grep -qдля получения только RC.
  • Взято у Костаса, он использует [[:blank:]]*для обработки пробелов и табуляции.
  • Избегайте echofrom нейрона и вместо этого используйте директиву find -print.
1
14.10.2021, 07:58

Теги

Похожие вопросы