技术解析
想把一个目录下的所有文件的名称里的某个字符给删掉,刚写好一个功能实验了下,指定了目录,结果没想到脚本去操作指定目录以外的其它目录了,都不知道为什么,还好没用 root,要不后果不堪设想,到现在也不知道原因何在
我指定了的目录是 /home/mh/Document/test,结果还把 /home/mh/下其它目录也扫了一遍,但不知道有没有文件被修改,估计是有了,我用的字符是"es",应该比较常见,求大大帮我看看,顺便问问有没有办法反向来一套复原的操作
这是脚本
#!/bin/bash
PWD=$(pwd)
# 校正输入
invalid_input () {
printf "\e[41m\e[30mInvalid input '$REPLY'\e[0m\n" >&2
exit 1
}
# 删除字符串并重命名
delWord () {
echo del
for i in $(ls);do
if [ -f $PWD/$i ];then
rename $str '' $(pwd)/$i
echo "good job"
elif [ -d $PWD/$i ];then
(cd $PWD/$i;delWord)
fi
done
printf "\e[42m\e[30mDone!\e[0m\n"
}
# 添加字符串并重命名
addWord () {
echo add
}
# 输入文件所在目录
read -p "Enter a path: " workpath
if [[ ! -d $workpath ]];then
printf "\e[42m\e[31mError: Enter a valid path, try again.\e[0m\n"
exit 2
fi
# 输入添加 /删除的字符串
read -p "Enter a String > " str
# str 中是否含有非法字符
if [[ $str =~ [^_-.[:alnum:]] ]] || [[ $str =~ ^[[:digit:]] ]];then
invalid_input
fi
# 选择添加 /删除操作
read -p "Delete or add a string?(1.del 2.add): "
if [[ $REPLY -eq 1 ]];then
set -x
cd $wordpath
delWord $str
set +x
elif [[ $REPLY -eq 2 ]];then
addWord
else
invalid_input
fi
这是部分输出结果,太多了只贴一部分,前面有好多终端拉不上去了看不到,也不知道处理了目标目录后它怎么干的,应该重定向到文本里的,唉!
......
+ cd linux
+ delWord
+ echo del
del
++ ls
+ for i in $(ls)
+ '[' -f /home/mh/Public/pycharm-2017.3.3/lib/libpty/linux/x86 ']'
+ '[' -d /home/mh/Public/pycharm-2017.3.3/lib/libpty/linux/x86 ']'
+ cd x86
+ delWord
+ echo del
del
++ ls
+ for i in $(ls)
+ '[' -f /home/mh/Public/pycharm-2017.3.3/lib/libpty/linux/x86/libpty.so ']'
+ rename es '' /home/mh/Public/pycharm-2017.3.3/lib/libpty/linux/x86/libpty.so
+ echo 'good job'
good job
+ printf '\e[42m\e[30mDone!\e[0m\n'
Done!
....