+ -
当前位置:首页 → 问答吧 → 一道shell面试题,有兴趣的来看看

一道shell面试题,有兴趣的来看看

时间:2011-03-19

来源:互联网

本帖最后由 chinaboywg 于 2011-03-19 12:37 编辑

目录下有如下.exe文件
11111111111 3334444.exe  dgfggg eee2333.exe  err8244 4848484hh.exe  fe7374j edddff24cd.exe  r7r8724 4747434.exe
要求:

将.exe文件改名为md5值+.sample的形式
同时计算 md5值的最后2位(进行16进制转10进制运算)如果能被5整除,就删除该文件

用shell实现

作者: chinaboywg   发布时间: 2011-03-19

我计算出md5后 居然用 mv 无法改名  很奇怪……
谁给个全的代码

作者: chinaboywg   发布时间: 2011-03-19

注意fe7374j edddff24cd.exe 文件名中间还有空格哦

作者: chinaboywg   发布时间: 2011-03-19

写的比较笨拙
  1. ls *.exe |while read line
  2. do
  3. md5=`echo -n ${line%.exe} |md5sum|cut -d' ' -f1`
  4. test=`echo ${md5:0-2}%5|bc`
  5. if [ $test -eq 0 ]
  6. then
  7. rm "$line"
  8. else
  9. mv "$line" $md5.sample
  10. fi
  11. done
复制代码

作者: yinyuemi   发布时间: 2011-03-19

  1. #!/bin/bash
  2. IFS=///
  3. for file in *.exe
  4. do S=$(echo $file|md5sum|awk '{T=strtonum("0x"substr($1,length($1)-1));print T/5==0?0:1}')
  5. [[ S==1 ]] && rm -rf $file||mv $file $(echo $file|md5sum|awk '{print $1}').sample
  6. done
复制代码
不知道这个行不行

作者: 网中淫   发布时间: 2011-03-19

回复 yinyuemi

SUSE下:
     ls *.exe |while read line
> do
> md5=`echo -n ${line%.exe} |md5sum|cut -d' ' -f1`
> test=`echo ${md5:0-2}%5|bc`
> if [ $test -eq 0 ]
> then
> rm "$line"
> else
> mv "$line" $md5.sample
> fi
> done
/bin/ls: *.exe: No such file or directory
suse:~/test #

REDHAT下:
[root@server1 test]# ls *.exe |while read line; do md5=`echo -n ${line%.exe} |md5sum|cut -d' ' -f1`; test=`echo ${md5:0-2}%5|bc`; if [ $test -eq 0 ]; then rm "$line"; else  mv "$line" $md5.sample; fi; done
rm: remove regular empty file `11111111111 3334444.exe'? [root@server1 test]#


最好能测试下再发

作者: chinaboywg   发布时间: 2011-03-19

MD5值是文件的?

作者: 惟吾无为   发布时间: 2011-03-19



QUOTE:
不知道这个行不行
网中淫 发表于 2011-03-19 13:12




    不行  最好测试下再发

作者: chinaboywg   发布时间: 2011-03-19



QUOTE:
回复  yinyuemi

SUSE下:
     ls *.exe |while read line
> do
> md5=`echo -n ${line%.exe} |md5s ...
chinaboywg 发表于 2011-03-19 13:31




    我测试了才发的,我用的服务器运行没问题

x86_64-redhat-linux-gnu

作者: yinyuemi   发布时间: 2011-03-19

#!/bin/bash
ls *.exe >filelist
i=1
tmp=`cat filelist |wc -l`
while [ $i -ne $tmp ]
do
  files=`cat filelist |sed -n "{${i},${i}p}"`
  #echo $files
  md5value=`echo -n "$files" |md5sum|cut -d' ' -f1`
  mv "$files" ${md5value}.sample
  md52=`echo $md5value |cut -c 31-32`
  #echo $md52
  md516=`echo "$md52"|awk '{print strtonum($0)}'`
  #echo $md516
  m=$md516
   [ $((m%5)) = 0 ] && echo $m $md5value
  i=`expr $i + 1`
done

作者: chinaboywg   发布时间: 2011-03-19

回复 chinaboywg


    你的代码是什么 贴出来看看

作者: db2-zhang   发布时间: 2011-03-19

回复 yinyuemi


    ls *.exe |while read line
do
md5=`echo -n ${line%.exe} |md5sum|cut -d' ' -f1`
mv "$line" $md5.sample
test=`echo ${md5:0-2}%5|bc`
if [ $test -eq 0 ]
then
rm $md5.sample
fi
done

作者: chinaboywg   发布时间: 2011-03-19

回复 chinaboywg


    你的这段代码好使吗?

作者: db2-zhang   发布时间: 2011-03-19

回复 chinaboywg


    我只想知道,
1, 你那MD5值是exe文件的, 还是文件名的
2, ls: no such file, 你的测试目录下有没有exe文件

作者: 惟吾无为   发布时间: 2011-03-19

回复 惟吾无为


    恩 可以运行
1 就是计算一个.exe 文件的md5值 把字符串取出来
2 刚才疏忽了

作者: chinaboywg   发布时间: 2011-03-19

回复 chinaboywg


    现在测试MD5值

md5=`echo -n ${line%.exe} |md5sum|cut -d' ' -f1`

有没有把这个值同你
md5sum file
获得的值比较

作者: 惟吾无为   发布时间: 2011-03-19

热门下载

更多