for d in /*/
do [ -d "$d" ] || break
f=$d/docs/doc1.txt
mkdir -p -- "${f%/*}"
touch -- "$f"
done
Я думаю, что это соответствует вашим целям. Может быть, я что-то упускаю.
Иначе вы можете:
set -- /*/
[ -d "$1" ] &&
printf 'd=$%d
mkdir -p -- "$d/docs" &&
touch -- "$d/docs/doc1.txt"
' $(seq "$#") | sh -s -- "$@"
или:
set -- /*/
while [ -d "$1" ]
do mkdir -p -- "$1"/docs
touch -- "$1"/docs/doc1.txt
shift ; done
Можно реализовать ServerAliveInterval
, ClientAliveInterval
, и ClientAliveCountMax
для решения проблемы тайм-аута.