50 lines
1.2 KiB
Bash
Executable File
50 lines
1.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# ollie:parallel read
|
|
# ollie:tier cold
|
|
# description: Search memories by keyword, tag, or title
|
|
# Args: <query>
|
|
|
|
[ -z "$*" ] && echo "usage: memory_recall <query>" && exit 1
|
|
|
|
mount="${OLLIE:-$HOME/mnt/ollie}"
|
|
mem_dir="$mount/m"
|
|
|
|
if [ ! -d "$mem_dir" ]; then
|
|
echo "error: memory directory does not exist: $mem_dir"
|
|
exit 1
|
|
fi
|
|
|
|
query="$*"
|
|
|
|
# Search filenames (title/tag match) and file bodies
|
|
matches=$(grep -ril "$query" "$mem_dir" 2>&1)
|
|
grep_exit=$?
|
|
if [ $grep_exit -gt 1 ]; then
|
|
echo "error: $matches"
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z "$matches" ]; then
|
|
echo "no matches for: $query"
|
|
exit 0
|
|
fi
|
|
|
|
max_files=10
|
|
max_lines_per_file=50
|
|
count=0
|
|
|
|
while IFS= read -r file; do
|
|
count=$((count + 1))
|
|
if [ $count -gt $max_files ]; then
|
|
echo "(showing $max_files of $(echo "$matches" | wc -l) matched files)"
|
|
break
|
|
fi
|
|
echo "=== $(basename "$file") ==="
|
|
head -n $max_lines_per_file "$file" || echo "error: could not read $file"
|
|
lines=$(wc -l < "$file" 2>/dev/null)
|
|
if [ "$lines" -gt $max_lines_per_file ] 2>/dev/null; then
|
|
echo "... ($lines lines total, showing first $max_lines_per_file)"
|
|
fi
|
|
echo
|
|
done <<< "$matches"
|