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

Bash 使用find、file和upx的系统范围elf压缩脚本,bash,shell,unix,elf,upx,Bash,Shell,Unix,Elf,Upx,我正在编写我的第一个脚本,它将压缩系统上的所有elf可执行文件 find / * -executable -type f -exec file '{}' \; | grep ELF | sed -e "s/[:].*//" | upx --best --ultra-brute upx没有响应发送的文件您需要在exec参数中包含管道。我使用sh-c: find / * -executable -type f -exec sh -c 'file '{}' \ | grep -q

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

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

upx没有响应发送的文件

您需要在
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
)。

不确定您的系统是否安全(是否至少要过滤共享的libs?),但我建议:

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

可能是重复的,如果是这样的话,我会马上改变它。如果是这样的话,我不知道我在看什么。约翰,这一点你是对的。不要在$(find)中为我使用
-使用
find-exec
find-print0 |-xargs-0
(使用更复杂的
-exec
xargs
子句)。顺便说一下,问题是您使用的是
{}
而不是
$()
。行延续反斜杠是不必要的。去掉星号-它只会碍事。丹尼斯,那没什么帮助。上下文是“我的第一个bash脚本”。