--- /dev/null
+#! /bin/sh
+# See the discussion at https://stackoverflow.com/q/67724347/7976758
+
+if [ -z "$1" ]; then
+ echo "Usage $0 from_commit [to_commit]"
+ exit 1
+fi
+
+from_commit="$1"
+to_commit="${2:-HEAD}"
+
+# In the superproject
+git --no-pager diff --name-only "$from_commit" "$to_commit"
+
+git submodule foreach "
+ # In submodule \"\$name\"
+ prev_commit=\`(git -C \"\$toplevel\" ls-tree "$from_commit" \"\$sm_path\" | awk '{print \$3}')\`
+ curr_commit=\`(git -C \"\$toplevel\" ls-tree "$to_commit" \"\$sm_path\" | awk '{print \$3}')\`
+ git --no-pager diff --name-only \$prev_commit \$curr_commit
+"