
想把一个目录下的所有文件的名称里的某个字符给删掉,刚写好一个功能实验了下,指定了目录,结果没想到脚本去操作指定目录以外的其它目录了,都不知道为什么,还好没用 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! .... 1 plko345 OP 对了,写的兴起,所以加了点不必要的功能,不要在意 |
2 est Apr 20, 2018 chmod -R 000 / |
3 lmqdlr Apr 20, 2018 via Android 想起来当年 bumblebee 的事故了 |
5 crazyvv Apr 20, 2018 请问您是在哪个目录执行的这个脚本? |
10 yrom Apr 20, 2018 你的一个变量拼错了 cd $wordpath delWord $str 应该是 $workpath (_) |
12 momocraft Apr 20, 2018 有点辣眼睛 没看完 几个小建议: - set -ue - 加一个 dryrun 模式 - read 有不少坑,不如从命令行参数传进来 |
13 Azumo Apr 20, 2018 想起刚玩 Linux 时在根目录迭代 sudo rm -rf / |
14 mentalkiller Apr 20, 2018 ```shell alias rm=trash trash(){ t=$(date +%Y%m%d%H%M%S) mv $@ /path/to/.trash/$@_$t } ``` |
17 menghuan Apr 20, 2018 出过类似事故 rm 时候变量未定义就从家目录开始删 |
21 doubleflower Apr 20, 2018 写脚本 -e 一定要啊,不然中间操作错了会一路错下去,发生什么事都可能 |
22 afpro Apr 21, 2018 PWD 会随着目录变化而变化的 运行一半就已经不是你开始的 PWD=$(pwd)了吧。。。。。。 |
24 szlszl35622 Apr 21, 2018 我一般都是在腾讯云的学生鸡上面测试脚本,, 出错直接重装系统 |