Bash 使用find、file和upx的系统范围elf压缩脚本
我正在编写我的第一个脚本,它将压缩系统上的所有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
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脚本”。