Посмотрел код только. Не проверял. Есть вопросы.
touch "$SYSMNT/aufs$nn$F" 2>/dev/null ; cp -a "$bundle/$F" "$SYSMNT/aufs${nn}$F"
Здесь мне кажется в ";" всякий смысл теряется. Либо ||, либо сразу cp ...
cp -a "$bundle/$F" "$SYSMNT/aufs${nn}`dirname "$F"`"
Так хорошо. С доп вложенностью должно решить вопросы. У cp вроде ключик есть для подобных махинаций. Вроде -T.
ntf -q "$bundle/$F" "$SYSMNT/aufs${nn}`dirname "$F"`"
Что за "ntf"? Даже не гуглится
PWD=$(pwd)
cp -a "$bundle/$F" "$SYSMNT/aufs${nn}`dirname "$F"`"
cd $PWD
Тут ускользает смысл смены PWD. В моем примере это было из-за --parents с ним cp... пути от текущего каталога добавляет. А тут?
И еще, как идея может после копирования пустого каталога добавить rm -rf "$SYSMNT/aufs${nn}${F}/* вдруг в другом сабмодуле в этой дире что-то есть. А если здесь он указан как пустой, то должен при распаковке остаться пустым.
По поводу проверки [ ! -h "$bundle/$F" ], сперва тоже хотел так потом решил лучше [ -d -o -f ], то есть если файл или папка то touch, если ссылка или любая другая неведомая хрень то cp... Боюсь с разного рода пайпами touch тоже не прокатит.
В моем варианте есть такая строчка F=$(echo $F |sed s':\$::'). Она удаляет слэши в конце. Если у нас в pfs.files диры всегда без слэшей то не нужна. Если со слэшами или не дай бог по разному, лучше оставить. cp /dir /dir и cp /dir/ /dir/ - результат дадут разный.