Chinaunix

标题: 请教:如何只查找出elf文件??? [打印本页]

作者: cczy    时间: 2009-04-19 12:01
标题: 请教:如何只查找出elf文件???
请问用shell如何才能只列出elf文件呀,我用这样的命令来实现:

ls -l | cut -c  4- |grep '^x' | awk -F' ' '{print $8}’

但这样也会把一些可执行的脚本文件给删了呀
如果用file -b *  ,然后再读它前三个字符是不是ELF这样是不是有点儿不太合适,并且file也列出了太多无用的信息。

[ 本帖最后由 cczy 于 2009-4-19 12:03 编辑 ]
作者: blackold    时间: 2009-04-19 12:04
标题: 回复 #1 cczy 的帖子
elf文件?是什么样的文件?
作者: cczy    时间: 2009-04-19 12:23
elf文件就是linux下的可执行文件,和windows下的.exe文件一样
作者: blackold    时间: 2009-04-19 12:27
标题: 回复 #3 cczy 的帖子
我啥特征啊?
作者: cczy    时间: 2009-04-19 12:33

你file **下看看就知道了
作者: blackold    时间: 2009-04-19 12:36
sorry. 现在没有环境。
作者: haimming    时间: 2009-04-19 12:37
呵呵,LZ直说不比让dx去找来得快?
作者: cczy    时间: 2009-04-19 12:40
原帖由 haimming 于 2009-4-19 12:37 发表
呵呵,LZ直说不比让dx去找来得快?


dx 是什么呀??没这个命令呀
作者: cczy    时间: 2009-04-19 13:42
看来问题要被搁置 了
作者: kwokcn    时间: 2009-04-19 14:04
我也不知道ELF文件的定义,查了一下,楼主所说的ELF格式(可执行链接格式)和实际是否可执行是无关的,同样shell脚本与是否可执行也是无关的,用文件操作权限判断明显和问题描述不符。

究竟是要ELF文件,还是ELF文件以及Shell文件,还是哪个用户组拥有x权限的文件,这个需要楼主自己搞明白。
作者: cjaizss    时间: 2009-04-19 14:11
可执行性并非elf文件的判断标准.
用file命令
作者: cjaizss    时间: 2009-04-19 14:12
另外,elf文件也并非一定是可执行文件.
作者: nhw_cs    时间: 2009-04-19 14:28
ls -l|awk '{print "file "$9}'|sh|grep ELF
作者: kwokcn    时间: 2009-04-19 15:31
ELF和Shell文件

  1. file * | awk -F":" '$2~/ELF/||/Bourne shell/{print $1}'
复制代码


可执行文件(不考虑用户组)

  1. ls -l | awk '$1~/x/{print $NF}'
复制代码

作者: cczy    时间: 2009-04-19 15:54
谢谢各位的帮助,我试试,
其实我想做的就是把某个目录下gcc -o 出来的文件全部删了,只保留.c文件
作者: cczy    时间: 2009-04-19 16:00
原帖由 kwokcn 于 2009-4-19 15:31 发表
ELF和Shell文件

file * | awk -F":" '$2~/ELF/||/Bourne shell/{print $1}'



这个可以实现
作者: kwokcn    时间: 2009-04-19 16:04
原帖由 cczy 于 2009-4-19 16:00 发表


这个可以实现

呃,那就把shell的判断条件去掉好了。


  1. file * | awk -F":" '$2~/ELF/{print $1}' | xargs rm -rf
复制代码

[ 本帖最后由 kwokcn 于 2009-4-19 16:06 编辑 ]
作者: cczy    时间: 2009-04-19 16:10
我是把这句话写在Makefile里面的,但是如下的这个写法会提示“~” 这个符号有错误,这是咋回事呀,我把它写成file * | awk -F":" '$2~/ELF/{print $1}' | xargs rm -r
的样子也不中

.PHONY: clean
clean:
    rm -rf `file * | awk -F":" '$2~/ELF/{print $1}'`
作者: kwokcn    时间: 2009-04-19 16:34
原帖由 cczy 于 2009-4-19 16:10 发表
我是把这句话写在Makefile里面的,但是如下的这个写法会提示“~” 这个符号有错误,这是咋回事呀,我把它写成file * | awk -F":" '$2~/ELF/{print $1}' | xargs rm -r
的样子也不中

.PHONY: clean
clean: ...

makefile和shell的规则是不一样的,我没研究过,应该是~在makefile内部有自己的意义。

那就换成这个算了:


  1. file * | grep ELF | cut -d: -f1 | xargs rm -rf
复制代码

作者: cczy    时间: 2009-04-19 16:49
多谢多谢
不过这个代码有漏洞,会把目录下的名字中包含ELF的所以文件给删了
作者: kwokcn    时间: 2009-04-19 16:53
原帖由 cczy 于 2009-4-19 16:49 发表
多谢多谢
不过这个代码有漏洞,会把目录下的名字中包含ELF的所以文件给删了

呃,那grep的时候处理一下就行了,换成 grep ":  *ELF"

[ 本帖最后由 kwokcn 于 2009-4-19 16:56 编辑 ]




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2