2021-07-29 00:37:35 -07:00
|
|
|
#!/usr/bin/env sh
|
2024-07-22 06:54:25 -07:00
|
|
|
# compat: +ash +bash +dash +hush -ksh +mksh +oksh +osh +posh +yash +zsh
|
2021-07-29 00:37:35 -07:00
|
|
|
|
2021-07-30 19:41:16 -07:00
|
|
|
bak() { ### @-
|
2021-08-01 09:27:25 -07:00
|
|
|
### backup files by creating copies and appending ".bak" to their names.
|
2021-08-01 07:58:21 -07:00
|
|
|
### this calls itself recursively to avoid clobbering existing backups.
|
|
|
|
###
|
|
|
|
### ```
|
2021-08-01 08:03:41 -07:00
|
|
|
### $ touch -d '2001-12-25 16:30:00' butts
|
|
|
|
### $ bak butts
|
|
|
|
### $ touch butts
|
|
|
|
### $ bak butts
|
|
|
|
### $ ls -l
|
2021-08-01 07:58:21 -07:00
|
|
|
### total 0
|
2021-08-01 08:03:41 -07:00
|
|
|
### -rw-r--r-- 1 notwa None 0 Aug 1 08:02 butts
|
|
|
|
### -rw-r--r-- 1 notwa None 0 Aug 1 08:02 butts.bak
|
2021-08-01 07:58:21 -07:00
|
|
|
### -rw-r--r-- 1 notwa None 0 Dec 25 2001 butts.bak.bak
|
|
|
|
### ```
|
2021-07-29 00:37:35 -07:00
|
|
|
[ $# -gt 0 ] || { printf "%s\n" "$0: too few arguments" >&2; return 1; }
|
2022-03-06 13:12:17 -08:00
|
|
|
local ret=0 f=
|
2021-07-29 00:37:35 -07:00
|
|
|
for f; do
|
2021-07-29 05:44:12 -07:00
|
|
|
if [ -e "$f.bak" ]; then
|
2021-08-01 08:03:41 -07:00
|
|
|
bak "$f.bak" || { ret=1; continue; }
|
2021-07-29 00:37:35 -07:00
|
|
|
fi
|
2021-07-29 05:44:12 -07:00
|
|
|
cp -p "$f" "$f.bak" || ret=1
|
2021-07-29 00:37:35 -07:00
|
|
|
done
|
|
|
|
return $ret
|
|
|
|
}
|
|
|
|
|
2021-08-02 13:48:46 -07:00
|
|
|
[ -n "${preload+-}" ] || bak "$@"
|