#!/usr/bin/env bash
# Desc: Grep search filenames of all git committed work trees
-# Usage: git-bk-find-file [string regex]
-# Example git-bk-find-file '*.txt'
+# Usage: git-bk-find-file [string grep pattern]
+# Example git-bk-find-file '.txt$'
# Ref/Attrib: albfan "How can I search Git branches for a file or directory?" https://stackoverflow.com/a/16868704/10850071
-# Version: 0.0.1
+# Version: 0.2.0
# Depends: GNU bash v5.1.16, GNU parallel 20210822
yell() { echo "$0: $*" >&2; } # print script path and all args to stderr
# Input: arg1: commit id
# args2+: passed to grep
# Output: stdout
+ # Depends: git 2.34.1
local commit results;
commit="$1"; shift;
# Decide if need to show commit at all
if results="$(git ls-tree -r --name-only "$commit" | grep "$1")"; then
- commit="${commit:(-8)}"; # get last 8 chars
- # Prepend results with commit
- results="$( echo "$results" | sed "s/^/$commit: /" )";
- printf "%s\n" "$results";
+ # Get commit timestamp
+ time="$(git -c log.showSignature=false show -s --format=%cI "$commit")";
+
+ # Get first 8 chars of commit
+ short_commit="${commit:0:8}";
+
+ # Output results
+ while read -r line; do
+ if [[ -z "$line" ]]; then continue; fi; # skip blank lines
+ printf "%s %s %s\n" "$time" "$short_commit" "$line";
+ done < <(printf "%s\n" "$results");
fi;
return 0;