@gniourf_gniourf tem a ideia certa:
set -o errexit -o nounset
cd ~/myfolder
for file in *.txt
do
dir="${file%.txt}"
mkdir -- "$dir"
mv -- "$file" "$dir"
done
Isso deve ser compatível com POSIX. Não é não reentrante. Ele não funcionará se você tiver dois arquivos chamados something.txt
e something.txt.txt
.