Вы были очень близко:
i=0
while [ $i -le 4 ]; do
alias "c$i"="ssh computer-1-$i"
i=`expr $i + 1`
done
Просто добавьте символ $
перед i
внутри цикла while .
Чтобы найти строку (, не являющуюся регулярным выражением ), без учета регистра, используйте grep -iF STRING
(, где STRING
должна быть искомая строка в кавычках ).
Чтобы просмотреть все обычные файлы в иерархии каталогов, выполните
find. -type f -exec grep -iF STRING /dev/null {} +
Основное различие между этой и вашей командой заключается в том, что она будет выполняться grep
для групп найденных файлов. Ваша команда будет выполняться grep
один раз для каждого найденного файла, что может быть медленнее, если файлов много. Разница заключается в +
в конце.
Другое отличие состоит в том, что, поскольку grep
вызывается более чем с одним файлом, его вывод будет содержать пути к файлам, в которых найдены совпадения. /dev/null
предназначен для принудительного такого поведения в случае, если grep
вызывается только с одним файлом. Вы можете использовать опцию grep
-H
вместо включения /dev/null
, если ваша реализация grep
имеет эту не -стандартную (, но общую опцию ).
Некоторые реализации grep
также имеют возможность рекурсии каталогов без помощи find
. Это часто делается с помощью опции -R
:
grep -R -iF STRING.
Обратите внимание, что GNU grep
также имеет параметр -r
, который немного отличается от его параметра -R
(с -r
, символические ссылки не будут использоваться, что будет более точно имитировать поведение, которое вы выполняете. d получить с запуском grep
черезfind. -type f
).
Если вам нужно найти только пути к файлам, которые содержат строку, а не обязательно фактические строки из тех файлов, которые соответствуют, то вы можете сделать это несколькими различными способами (все в основном аналогично тому, что упомянуто выше ).
Используйте grep -q
в качестве теста для каждого файла:
find. -type f -exec grep -qiF STRING {} ';' -print
Используйте grep -l
для групп файлов, найденных с помощьюfind
:
find. -type f -exec grep -ilF STRING {} +
Использовать рекурсивноеgrep -l
:
grep -R -ilF STRING.
Если вы хотите выполнить дальнейшую обработку файлов, содержащих данную строку, я бы выбрал первый из этих вариантов:
find. -type f -exec grep -qiF STRING {} ';' -exec sh -c '
for pathname do
# Process "$pathname" here
done' sh {} +
или, выполняя grep
внутри строчного скрипта -:
find. -type f -exec sh -c '
for pathname do
if grep -qiF STRING "$pathname"; then
# Process "$pathname" here
fi
done' sh {} +
Связанные: