Попробуйте это:
find . -mindepth 1 -maxdepth 1 ! -name '*.jar' | sort
Если вы действительно хотите удалить все файлы на выходе, просто выполните
find . -mindepth 1 -maxdepth 1 ! -name '*.jar' -delete
Вы можете прочитать страницу руководства find (1) для получения дополнительной информации об этом действительно мощном инструменте.
EDIT:
Поскольку флаг -delete встречается только в GNU find> 4.2.3 (как указано в SiegeX), вот несколько альтернатив, которые также гарантируют, что мы не пытаемся удалить каталоги:
find . -mindepth 1 -maxdepth 1 ! -type d ! -name '*.jar' -print0 | xargs -0 -r rm -f
Флаги -r xargs - это расширение GNU, поэтому оно немного более переносимо (работает на * BSD), но не так чисто:
find . -mindepth 1 -maxdepth 1 ! -type d ! -name '*.jar' -print0 | xargs -0 rm -f
В качестве последнего, но наиболее портативного - курорта:
find . -mindepth 1 -maxdepth 1 ! -type d ! -name '*.jar' -exec rm '{}' ';'
Недостатком этого является вызов rm отдельно для каждого файла, что делает его значительно медленнее.