ln ne prend que 2 arguments au maximum (sans compter les options), le joker ../* s'étend cependant à tous les noms de fichiers du dossier. Il suffit de placer un écho avant ln pour voir ce qui se passe.
Faites-le un par un de cette façon :
cd /data/sdext2/app
for i in * ; do ln -s /data/sdext2/app/"$i" /data/app/;done
ou
for i in /data/sdext2/app/* ; do ln -s "$i" /data/app/$(basename "$i");done
EDIT
Ok, c'est comme ça que ça marche sur mon appareil :
me@workstation:~$ adb shell
shell@Android:/ $ id
uid=2000(shell) gid=2000(shell) groups=1003(graphics),1004(input),1007(log),[...]
shell@Android:/ $ su
shell@Android:/ # id
uid=0(Root) gid=0(Root) groups=1003(graphics),1004(input),1007(log),[...]
shell@Android:/ # cd /data/
shell@Android:/data # ln -s /data/sdext2/app/banana.app /data/app/cucumber.app
shell@Android:/data # ls -l /data/app/cucumber.app
lrwxrwxrwx Root Root 2012-11-06 22:30 /data/app/cucumber.app -> /data/sdext2/app/banana.app