免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5796 | 回复: 18
打印 上一主题 下一主题

[已解决]文件夹下多个2个文件大小比较 [复制链接]

论坛徽章:
1
平安夜徽章
日期:2015-12-26 00:06:30
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-04-16 17:10 |只看该作者 |倒序浏览
本帖最后由 hc_ttcm 于 2010-04-20 08:58 编辑

问大家一个shell的问题
[root@client examples]# ls -l
总计 0
-rw-r--r-- 1 root root 1 2010-04-16 14:51 game1_20100315.txt
-rw-r--r-- 1 root root 2 2010-04-16 14:51 game1_20100316.txt
-rw-r--r-- 1 root root 3 2010-04-16 14:51 game2_20100315.txt
-rw-r--r-- 1 root root 4 2010-04-16 14:51 game2_20100316.txt
-rw-r--r-- 1 root root 5 2010-04-16 14:51 game3_20100315.txt
-rw-r--r-- 1 root root 6 2010-04-16 14:51 game3_20100316.txt
目录下 有很多这样的文件
我现在要比较 以game1开头的文件 此例子中的就是game1_20100315.txt game1_20100316.txt  如果game1_20100316.txt 的大小大于game1_20100315.txt  则print OK
我想到了个方法
#!/bin/bash
a=`ls -l $1|awk '{print $5}'|grep game1*15*`
b=`ls -l $2|awk '{print $5}'|grep game1*16*`
if [ $a -lt $b ]
  then
    echo 'ok'
  else
    echo '15.txt > 16.txt'
fi

----------------
问题是,如果目录里有很多game4_20100315.txt game4_20100316.txt 一直到game50 ,同时也要比较game2 game3 等中的文件大小怎么处理啊?

论坛徽章:
0
2 [报告]
发表于 2010-04-16 17:41 |只看该作者
这个比较麻烦~给你个比较麻烦的思路吧我要下班没时间写了~
你可以把所有的文件大小输出到一个文件,在用sed合并两行。然后在 处理

论坛徽章:
0
3 [报告]
发表于 2010-04-16 17:52 |只看该作者
  1. ls -l | grep "game.*201003" |sort| awk '{if(NR%2==0){if(size1>$5)print file1">"$NF;else if(size1<$5) print file1"<"$NF;else print file1"="$NF}else{file1=$NF;size1=$5;}}'
复制代码

论坛徽章:
0
4 [报告]
发表于 2010-04-16 19:12 |只看该作者
没看懂啥意思“多个2个文件大小比较”......
不明白啊不明白。。。。

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
5 [报告]
发表于 2010-04-16 19:19 |只看该作者
回复 4# lkk2003rty


game1_20100315.txt和game1_20100316.txt进行比较
game2_20100315.txt和game2_20100316.txt进行比较
game3_20100315.txt和game3_20100316.txt进行比较
...

论坛徽章:
0
6 [报告]
发表于 2010-04-17 00:43 |只看该作者
for i in {1..50}
do

  a=`ls -l $1|awk '{print $5}'|grep game${i}*15*`
  b=`ls -l $2|awk '{print $5}'|grep game${i}*16*`
  if [ $a -lt $b ]
    then
      echo "game${i} ok"
    else
    echo "game${i}_15.txt > game${i}_16.txt"
  fi
done

偷懒了。呵呵 凑合用下

论坛徽章:
1
平安夜徽章
日期:2015-12-26 00:06:30
7 [报告]
发表于 2010-04-19 08:38 |只看该作者
这个比较麻烦~给你个比较麻烦的思路吧我要下班没时间写了~
你可以把所有的文件大小输出到一个文件,在用se ...
iori809 发表于 2010-04-16 17:41



    谢谢

   sed用的还不熟悉

论坛徽章:
1
平安夜徽章
日期:2015-12-26 00:06:30
8 [报告]
发表于 2010-04-19 08:39 |只看该作者
回复 3# ghp268


    谢谢

论坛徽章:
1
平安夜徽章
日期:2015-12-26 00:06:30
9 [报告]
发表于 2010-04-19 08:40 |只看该作者
for i in {1..50}
do

  a=`ls -l $1|awk '{print $5}'|grep game${i}*15*`
  b=`ls -l $2|awk '{print ...
Celinde 发表于 2010-04-17 00:43



    哇
   这个我看懂了

论坛徽章:
0
10 [报告]
发表于 2010-04-19 08:55 |只看该作者

  1. old=20100315
  2. new=20100316
  3. for f in game*_$old.txt
  4. do
  5.    nf=$(echo $f|sed "s/$old/$new/")
  6.    [ -f "$nf" ] || continue  #如果新旧文件肯定存在,就不需要这一行
  7.    [  $(stat -c %s "$f") -lt $(stat -c %s "$nf") ] && echo $f  OK
  8. done

  9. 想法是先列出旧的日期的文件,比如设定 old=20100315
  10. 然后与新的文件,比如设定 new=20100316 进行大小比较,如果旧的大小小于新的大小,就输出旧的文件名

  11. stat -c %s "$f"  是获取文件的大小(以字节为单位)
  12. nf=$(echo $f|sed "s/$old/$new/")  是获取对应的新文件名

复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP