Найдите все файлы с Хижиной Python

Я не хочу использовать ssh без пароля, так как мой файл секретных ключей может быть поставлен под угрозу, который еще хуже.

Нет, это неправильно. Файл секретных ключей обеспечивает больше безопасности, чем пароль. Используйте файл секретных ключей. Файл секретных ключей шифруется с паролем; если кто-то получает файл ключей, им все еще нужен Ваш пароль. Если бы Вы использовали аутентификацию по паролю, то любой овладевающий паролем был бы дома свободный.

Выполненный ssh-agent на время Вашей сессии. Прежде чем Вы будете использовать конкретный ключ, будете вводить пароль с ssh-add (или посредством некоторой подсказки GUI). Затем не будет подсказки при соединении использования этого ключа.

9
26.02.2013, 00:23
2 ответа

Попытайтесь делать это:

grep -rl '^#!/.*python' .

То же самое с ack:

ack -rl '^#!/.*python' .
7
27.01.2020, 20:05
  • 1
    Отметьте это в то время как grep -l прекратил бы читать файл, как только он находит соответствие для файлов без соответствия, он считал бы целый файл. Это также нашло бы соответствия посреди файлов, так например, это могло соответствовать на a shar файл, который содержит сценарии Python. –  Stéphane Chazelas 25.02.2013, 23:56

С GNU, или FreeBSD или NetBSD или OpenBSD (и потенциально другие) awk:

find . -type f -exec awk '
  /^#!.*python/{print FILENAME}
  {nextfile}' {} +

Только посмотрел бы на первую строку каждого файла и будет работать как немногие awks по мере необходимости.

nextfile оператор выше не является стандартным, но найден в нескольких реализациях включая GNU один (который является, вероятно, где он произошел из).

В то время как код выше, казалось бы, работал бы в других реализациях также, nextfile оператор ничего не сделал бы там (будет распознан как выражение, состоящее в сбросе nextfile переменная), так, чтобы означал бы все файлы, будет считан полностью, и имя файла было бы распечатано для каждого согласующего отрезка длинной линии.

Если Ваш awk поддержки FNR (как POSIX awks делают, но не оригинал awk, таким образом на Солярисе /usr/xpg4/bin/awk и нет /usr/bin/awk) и нет nextfile, можно записать это:

find . -type f -exec awk 'FNR == 1 && /^#!.*python/{print FILENAME}' {} +

Который все еще работал бы как немногие awks как возможный, но считал бы файлы полностью.

Другая альтернатива, чтобы не читать файлы полностью и это работало бы с каждым awk и find но означал бы выполнять тот awk на файл был бы:

find . -type f -exec awk '
  /^#!.*python/{r=1};{exit}
  END {exit(1-r)}' {} \; -print
14
27.01.2020, 20:05
  • 1
    +1, но последняя команда соответствует пустым файлам также. –  l0b0 28.02.2013, 12:30
  • 2
    @l0b0. Обновленный. Право –  Stéphane Chazelas 28.02.2013, 12:44

Теги

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