1

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

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

upx 没有响应发送的文件

4

2 回答 2

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
于 2012-08-03T08:29:44.927 回答
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)。

于 2012-08-03T08:14:42.450 回答