Tente isto:
for f in *.txt; do d="$(head -1 "$f" | awk '{print $1}').txt"; if [ ! -f "$d" ]; then mv "$f" "$d"; else echo "File '$d' already exists! Skiped '$f'"; fi; done
ou variante mais longa (como script):
#!/bin/sh
for f in *.txt; do
d="$(head -1 "$f" | awk '{print $1}').txt"
if [ ! -f "$d" ]; then
mv "$f" "$d"
else
echo "File '$d' already exists! Skiped '$f'"
fi
done
No caso de existir um ficheiro de destino, este one-liner salta-o.