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

ただし、シェルの制限にぶつかる可能性があります(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
于 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ベースのソリューションは機能しないため、より良い方法です(さらに良いの-print0xargs -0.

于 2012-08-03T08:14:42.450 に答える