免费注册 查看新帖 |

Chinaunix

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

请问,在bash 脚本中怎么用file 命令判断一个文件是jpg还是gif格式? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-04-11 22:48 |只看该作者 |倒序浏览
不是靠后缀名。

有些文件是gif格式的,可是后缀名是 jpg .

我试过了,用 file 命令可以判断出文件是 gif 还是 jpg ,不是根据后缀名。

怎么才能在脚本中利用 file 命令的返回值 ,或者别的方法,判断一个文件是 gif 还是 jpg ,然后改回正确的后缀名呢?

多谢 Orz

论坛徽章:
0
2 [报告]
发表于 2012-04-11 22:51 |只看该作者
本帖最后由 liuqionline 于 2012-04-11 22:52 编辑

我查看了 file 命令的 manual ,只说了在命令行中的用法,咋整?

比如:
  1. $ file 07619313.jpg
  2. 07619313.jpg: GIF image data, version 89a, 400 x 227
复制代码
可以看出这个JPG后缀名的文件其实是GIF文件。

可是怎么在 shell 脚本中用 file 命令,根据判断的结果来改回正确的后缀呢?

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
3 [报告]
发表于 2012-04-11 23:13 |只看该作者
回复 2# liuqionline
  1. for i in *;
  2. do
  3. suffix=$(cut -d' ' -f2 <<<$(file $i));
  4. if grep -iv $suffix <<<${i##*.} >/dev/null;
  5. then
  6.    mv $i ${i%.*}.${suffix};
  7. fi;
  8. done
复制代码

论坛徽章:
1
辰龙
日期:2014-05-22 11:38:58
4 [报告]
发表于 2012-04-11 23:17 |只看该作者
  1. [winway@winway test]$ cat test.sh
  2. #!/bin/sh

  3. case $(file "$1") in
  4.         *PNG*)
  5.                 echo "PNG"
  6.                 ;;
  7.         *gif*)
  8.                 echo "gif"
  9.                 ;;
  10.         *)
  11.                 echo "Unknown"
  12.                 ;;
  13. esac
  14. [winway@winway test]$ ./test.sh ETH\ Header.png   
  15. PNG
  16. [winway@winway test]$ ./test.sh IPv6\ Header.gif                 
  17. gif
复制代码

论坛徽章:
0
5 [报告]
发表于 2012-04-11 23:37 |只看该作者
yinyuemi 发表于 2012-04-11 23:13
回复 2# liuqionline


<<<  原来有三个重定向符号的

论坛徽章:
1
巳蛇
日期:2013-10-28 15:55:33
6 [报告]
发表于 2012-04-12 08:28 |只看该作者
我记得file有个参数输出mime类型的, 你去看看.

论坛徽章:
0
7 [报告]
发表于 2012-04-12 09:40 |只看该作者
根据 : /usr/share/misc/magic  等等 文件 中指定的文件魔术字    来判断!!

论坛徽章:
0
8 [报告]
发表于 2012-04-12 11:28 |只看该作者
多谢!
Orz

论坛徽章:
0
9 [报告]
发表于 2012-04-12 18:37 |只看该作者
我也做了一个,虽然简单,但是也能工作了:
  1. #!/bin/sh
  2. for giffile in *.jpg
  3. do
  4.     file -b $giffile | grep ^GIF
  5.    
  6.     if [ $? = 0 ];
  7.     then
  8.         mv $giffile ${giffile/%.jpg/.gif}
  9.     fi
  10. done
复制代码

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
10 [报告]
发表于 2012-04-12 19:36 |只看该作者
liuqionline 发表于 2012-04-12 18:37
我也做了一个,虽然简单,但是也能工作了:

可以去捕捉GIF这个单词的存在,grep -w
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP