Если файлы .jar не меняются между вызовами вашего сценария, вы можете значительно ускорить выполнение сценария, кэшируя файлы .jar и работая только с теми, которые изменились, например:
#!/bin/env bash
set -e
# FIXME: make this tuneable
output='yang models'
input='.'
cache='/some/where'
mkdir -p "$cache" || exit 1
readarray -d '' jars < <(find "$input/system/org/linters" -type f -name '*.jar' -print0 | sort -zu)
# FIXME: also wipe output?
mkdir -p "$output" || exit 1
for jarpath in "${jars[@]}"; do
diff -q "$jarpath" "$cache" || continue
cp "$jarpath" "$cache"
jarfile="${jarpath##*/}"
artifact="${jarfile%.*}"
printf 'Extracting modules from %s\n' "$artifact"
# FIXME: better control over unzip errors
unzip -q "$jarpath" 'META-INF/yang/*' -d "$artifact" 2>/dev/null
dir="$artifact/META-INF/yang"
if [ -d "$dir" ]; then
readarray -d '' yangs < <(find "$dir" -type f -name '*.yang' -print0)
for yangpath in "${yangs[@]}"; do
yangfile="${yangpath##*/}"
printf '\t%s\n' "$yangfile"
# FIXME: better duplicate detection
mv -n "$yangpath" "$output"
done
fi
rm -rf "$artifact"
done
См. Правильное использование заглавных букв в сценариях Bash и shell , http://mywiki.wooledge.org/BashFAQ/082, https://mywiki.wooledge.org/Quotes, Как сохранить результаты команды "find" в виде массива в Bash для некоторых других изменений, которые я сделал выше.
Я предполагаю, что у вас есть причина зацикливаться на файлах .yang и не перемещать их, если файл с таким именем уже существует, вместо того, чтобы разархивировать файл .jar вконечный выходной каталог.