使用find,file和upx的系统范围的elf压缩脚本

时间:2012-08-03 01:51:38

标签: bash shell unix elf upx

我正在处理我的第一个脚本,它是压缩系统上的所有elf可执行文件。

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

upx没有响应发送的文件

2 个答案:

答案 0 :(得分: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 :(得分:1)

您需要在exec参数中包含管道。我用sh -c

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

此外,我在这里使用-print而不是sed的构造。最好是因为如果你的文件名中有:,那么基于sed的解决方案就行不通了(-print0 xargs -0更好。