mirror of
https://github.com/notwa/rc
synced 2024-06-26 09:07:12 -07:00
accelerate decently
with ls
sorting and ignore more stuff
This commit is contained in:
parent
f0fedca16f
commit
cdd044cb0b
25
sh/decently
25
sh/decently
|
@ -15,12 +15,31 @@ decently() ( ### @-
|
||||||
### has its timestamp updated. symlinks are followed.
|
### has its timestamp updated. symlinks are followed.
|
||||||
### `.git` subdirectories are skipped over.
|
### `.git` subdirectories are skipped over.
|
||||||
### the timestamps of subdirectories are ignored.
|
### the timestamps of subdirectories are ignored.
|
||||||
local arg= dir= latest= prev= ts= fails= succs=0
|
|
||||||
finder() { find "$dir" -type f "$@" '!' -path '*/.git/*' -print -quit; }
|
|
||||||
[ -n "$1" ] || { printf '%s: missing directory argument\n' decently >&2; return 1; }
|
[ -n "$1" ] || { printf '%s: missing directory argument\n' decently >&2; return 1; }
|
||||||
|
|
||||||
|
local arg= dir= latest= prev= ts= fails= succs=0
|
||||||
|
|
||||||
|
finder() {
|
||||||
|
find "$dir" -type f "$@" \
|
||||||
|
'!' \
|
||||||
|
'(' -path '*/.git/*' \
|
||||||
|
-or -path '*/__pycache__/*' \
|
||||||
|
-or -path '*/[Dd]esktop.ini' \
|
||||||
|
-or -path '*/Thumbs.db' \
|
||||||
|
-or -path '*/.DS_Store' \
|
||||||
|
')' \
|
||||||
|
-exec ls -t1 '{}' + \
|
||||||
|
2>/dev/null \
|
||||||
|
| while read -r f; do
|
||||||
|
printf '%s\n' "$f"
|
||||||
|
break
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
for arg; do
|
for arg; do
|
||||||
dir="$(readlink -f -- "$arg")" || continue
|
dir="$(readlink -f -- "$arg")" || continue
|
||||||
[ -d "$dir" ] || { printf '%s: not a directory: %s\n' decently "$dir" >&2; continue; }
|
[ -d "$dir" ] || { printf '%s: not a directory: %s\n' decently "$dir" >&2; continue; }
|
||||||
|
|
||||||
prev=
|
prev=
|
||||||
latest="$(finder)" || continue
|
latest="$(finder)" || continue
|
||||||
while [ -n "$latest" ]; do
|
while [ -n "$latest" ]; do
|
||||||
|
@ -28,12 +47,14 @@ decently() ( ### @-
|
||||||
latest="$(finder -newer "$latest")" || break
|
latest="$(finder -newer "$latest")" || break
|
||||||
done
|
done
|
||||||
[ -e "$prev" ] || { printf '%s: no valid files found: %s\n' decently "$dir" >&2; continue; }
|
[ -e "$prev" ] || { printf '%s: no valid files found: %s\n' decently "$dir" >&2; continue; }
|
||||||
|
|
||||||
ts="$(date -u '+%s' -r "$prev")"
|
ts="$(date -u '+%s' -r "$prev")"
|
||||||
dir="${dir%/}/" # ensure dir has a trailing slash
|
dir="${dir%/}/" # ensure dir has a trailing slash
|
||||||
printf '%s\t%s\n' "$ts" "${arg%/}/${prev#$dir}"
|
printf '%s\t%s\n' "$ts" "${arg%/}/${prev#$dir}"
|
||||||
touch -c -r "$prev" "$dir" || continue
|
touch -c -r "$prev" "$dir" || continue
|
||||||
: $(( succs+=1 ))
|
: $(( succs+=1 ))
|
||||||
done
|
done
|
||||||
|
|
||||||
fails=$(( $# - succs ))
|
fails=$(( $# - succs ))
|
||||||
[ $fails -le 255 ] || fails=255
|
[ $fails -le 255 ] || fails=255
|
||||||
return $fails
|
return $fails
|
||||||
|
|
Loading…
Reference in New Issue
Block a user