Eu pensei um pouco sobre isso e descobri duas soluções. O primeiro usa basename e dirname:
for name in */*/file
do cp $name ../all_files/$(basename -- "$(dirname -- "$name")")
done
Este usa a divisão de strings (como eu queria fazer originalmente)
for name in */*/choices
do parts=(${name//\// })
directory=${parts[${#parts[@]} - 2]}
cp $name all_files/${directory}.txt
done
Espero que isso ajude alguém!