私は最初のスクリプトに取り組んでおり、システム上のすべてのelf実行可能ファイルを圧縮することです。
find / * -executable -type f -exec file '{}' \; | grep ELF | sed -e "s/[:].*//" |
upx --best --ultra-brute
upxは送信されたファイルに応答していません
システムに安全な方法を使用しているかどうかはわかりませんが(少なくとも共有ライブラリをフィルタリングしたくないですか?)、次のことをお勧めします。
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
ただし、シェルの制限にぶつかる可能性があります(xargs:引数行が長すぎます)
回避策の1つは、ループを使用することです。
find / -executable -type f -print0 | xargs -0 file |\
grep ELF | cut -d: -f1 |\
while read f
do
upx --best --ultra-brute "$f"
done
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
.