Respondiendo a mi propia pregunta :Parece que no puede instalar ccrypt a través de paquetes. La única forma de hacerlo funcionar era:
chown user:user *
todos los archivos a mi nombre de usuario actual В настоящее время ваш скрипт написан таким образом, что он будет запускаться find
, а затем запускать grep
для каждого найденного файла, для каждого ip
, который он находит в ips.txt
.
Вам не нужно запускать find
каждый раз, чтобы получить один и тот же список файлов, поэтому удалите его из цикла while
и назначьте его переменной. Вам также не нужно запускать grep
для каждого найденного файла, вы можете искать их все одной командой. Теперь, когда у вас есть список файлов, вы можете выполнить grep
для каждого ip
и вернуть только первое совпадение. Теперь скрипт будет выглядеть примерно так:
files=$(find. -maxdepth 1 -type f -not -name ips.txt -not -name results.res)
while read ip; do
grep --with-filename --max-count=1 "$ip" $files | head -n 1 >> results.res
done < ips.txt
Это будет grep
через каждый файл из команды find
для каждого ip
в ips.txt
и должно содержать строки, содержащие каждый IP-адрес,и первый файл, в котором он был найден в results.res
.
РЕДАКТИРОВАТЬ:
После некоторого тестирования оказалось, что есть лучший способ, поскольку предыдущий код вообще не обрабатывает имена файлов с пробелами или нечетными символами. Поэтому я собираюсь избавиться от find
, поскольку здесь он кажется ненужным.
Вы планируете grep
просматривать все файлы в текущем каталоге, кроме results.res
и ips.txt
, поэтому вы можете использовать grep
вообще без поиска:
while read ip; do
grep --with-filename --max-count=1 --exclude={results.res,ips.txt} "$ip" * | head -n 1 >> results.res
done < ips.txt