added --file mode

This commit is contained in:
2026-10-22 12:24:33 +06:00
parent 5f6fcf46d9
commit 933e5ccb58
9 changed files with 2431 additions and 55 deletions

54
build/__lcg-out-script.sh Executable file
View File

@@ -0,0 +1,54 @@
#!/usr/bin/env bash
# lcg: нужен скрипт на bash который получит на вход два араметра корень поиска и поисковое выражение и проведет поиск по всем подпапкам начиная с указанной указанного поискового выражения и выведет все в файл указанный третьим параметром скрипта. поисковое выражение ищется как в именах файлов так и в контенте через grep отсекая бинарные файлы и прочее нетекстовое
# обновлено: 2026-10-21 18:23:18
set -euo pipefail
# Использование:
# ./search.sh <корень_поиска> <выражение> <файл_результата>
set -u
if [[ $# -ne 3 ]]; then
echo "Использование: $0 <корень_поиска> <выражение> <файл_результата>" >&2
exit 1
fi
root=$1
expr=$2
output=$3
if [[ ! -d "$root" ]]; then
echo "Ошибка: каталог не найден: $root" >&2
exit 1
fi
root=$(realpath -m -- "$root")
output=$(realpath -m -- "$output")
# Создаём или очищаем файл результата
: > "$output" || {
echo "Ошибка: невозможно записать в $output" >&2
exit 1
}
find "$root" -type f -print0 |
while IFS= read -r -d '' file; do
# Не искать внутри самого файла результатов
[[ "$file" == "$output" ]] && continue
# Поиск выражения в имени файла или полном пути
if grep -E -q -- "$expr" <<< "$file"; then
printf '[NAME] %s\n' "$file" >> "$output"
fi
# Поиск в содержимом.
# -I — игнорировать бинарные файлы
# -n — номер строки
# -H — имя файла
grep -I -nH -F -- "$expr" "$file" >> "$output" 2>/dev/null || true
done
echo "Результаты записаны в: $output"