Com as ferramentas do GNU, você pode fazer algo como:
(export LC_ALL=C
find . -name '*.txt' -print0 |
sed -Ez 's|/x([^/]*)$|/|' |
sort -z |
uniq -zd |
sed -z 'h;s|.*/|&x|;G' |
xargs -r0n2 echo mv)
Isso pressupõe que não haja arquivos cujo nome comece com mais de um x
. Por exemplo, não fará mv ./xx.txt ./x.txt