代码: 全选
#!/bin/bash
#整理当前目录下的jpg图片名字,按照目录名字排序。
dir=`pwd`;dir=${dir##\/*\/}
num=0
for i in *.jpg *.JPG
do
#符合规则的文件不需要修改
if [ `expr match "$i" "${dir}-[0-9]*.[jpg|JPG]$"` != 0 ]; then
tmp=${i#"$dir"-}
tmp=${tmp%".jpg"}
# echo ${tmp} ----------------------
if [ "$tmp" -le "$num" ]; then
echo $i 符合规则,不修改。当前排序已到 $num。
continue
fi
fi
result="$dir"-$num.jpg
#防止覆盖已有文件
while [ -e "$result" ]
do
((num++))
result="$dir"-$num.jpg
done
# i=`echo $i | sed 's/\ /\\\ /g'`
# result=`echo $result | sed 's/\ /\\\ /g'`
# | sed 's/\(/\\\(/g' | sed 's/\)/\\\)/g'
#实际操作改名了。
echo $i '->' $result
mv "$i" "$result"
((num++))
done
如果普通的文件名操作,就用rename算了。起码支持sed的那种s和y操作。其他的操作就麻烦些,都是perlexp的写法。Mastering Regular Expressions.pdf里面有perlexp的说明。复杂的。