2012-08-03 36 views
1

我正在处理我的第一个脚本,它是压缩系统上的所有elf可执行文件。使用查找,文件和upx的全系列elf压缩脚本

find/* -executable -type f -exec file '{}' \; | grep ELF | sed -e "s/[:].*//" |  
    upx --best --ultra-brute 

UPX不响应发送的文件

+1

可能的重复[如何包含管道|在我的Linux找到-exec命令?](http://stackoverflow.com/questions/307015/how-do-i-include-a-pipe-in​​-my-linux-find-exec-command) – 2012-08-03 02:07:13

+0

也许,我如果是这样的话,我们会在一秒钟之内改变它。如果是这样,我不知道我在看什么。 – Josh 2012-08-03 02:09:36

+0

约翰,你是对的。 – Josh 2012-08-03 02:15:56

回答

2

不知道,如果你为你的系统会以安全的方式(你不希望过滤至少共享库?),但我建议:

find/-executable -type f | xargs file |\ 
grep ELF | cut -d: -f1 | xargs upx --best --ultra-brute 

如果在文件空白名

find/-executable -type f -print0 | xargs -0 file |\ 
grep ELF | cut -d: -f1 | xargs -0 upx --best --ultra-brute 

,但很可能你会碰到一个shell限制(xargs的:参数线太长)

一种解决方法是使用一个循环:

find/-executable -type f -print0 | xargs -0 file |\ 
grep ELF | cut -d: -f1 |\ 
while read f 
do 
    upx --best --ultra-brute "$f" 
done 
1

您需要包括在exec论点管。我这样做,与sh -c

find/* -executable -type f -exec sh -c 'file '{}' \ 
| grep -q ELF' \; -print \ 
| upx --best --ultra-brute 

而且我在这里使用-print,而不是你的施工sed。这样更好,因为如果你在文件名中有:,基于sed的解决方案将不起作用(更好的是-print0xargs -0)。