blob: 2d0687f21f6c094dd43340c3176c17cd42a815e2 (
plain)
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
#!/bin/sh
# Order files by adding/changing numbers (like "01. ") in front of their names
usage() { echo usage: $0 [-n number width] [-s separator] 1>&2; exit 1; }
# Default values
n=2
s='. '
# Parse options
while getopts n:s: o
do
case $o in
n) n=$OPTARG ;;
s) s=$OPTARG ;;
?) usage ;;
esac
done
shift $((OPTIND-1))
# Validate options
case "$n" in
[1-9]) ;;
*) echo $0: n must be a number from 1 to 9 1>&2
exit 1 ;;
esac
test -z "$1" && usage
# Construct glob and regex substitution from -s and -n
i=0; while test $((i++)) -lt "$n"; do sub=$sub'[0-9]'; done
glob=$sub
sub="s/^$sub$(printf '%s\n' "$s" | sed 's/\([.*[\\]\|\]\)/\\&/g')//"
totext() {
for f in "$@"; do printf '%s\n' "$f"; done |
sort |
sed "$sub"
}
fromtext() {
nl -s.\ -w2 -nrz | {
i=1
while read new
do
name=`printf '%s\n' "$new" | sed "$sub"`
if test -e "$name"
then mv "$name" "$new"
else mv $glob"$s$name" "$new" 2>&-
fi
done
}
}
# Edit order
tmp=/tmp/ord.$RANDOM
totext "$@" > $tmp
${EDITOR:-vi} $tmp
fromtext < $tmp
rm $tmp
|