-
Notifications
You must be signed in to change notification settings - Fork 0
/
bak
executable file
·30 lines (28 loc) · 905 Bytes
/
bak
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/usr/bin/env sh
# compat: +ash +bash +dash +hush -ksh +mksh +oksh +osh +posh +yash +zsh
bak() { ### @-
### backup files by creating copies and appending ".bak" to their names.
### this calls itself recursively to avoid clobbering existing backups.
###
### ```
### $ touch -d '2001-12-25 16:30:00' butts
### $ bak butts
### $ touch butts
### $ bak butts
### $ ls -l
### total 0
### -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
### -rw-r--r-- 1 notwa None 0 Dec 25 2001 butts.bak.bak
### ```
[ $# -gt 0 ] || { printf "%s\n" "$0: too few arguments" >&2; return 1; }
local ret=0 f=
for f; do
if [ -e "$f.bak" ]; then
bak "$f.bak" || { ret=1; continue; }
fi
cp -p "$f" "$f.bak" || ret=1
done
return $ret
}
[ -n "${preload+-}" ] || bak "$@"