Seu principal problema é como destacado por @wigy , que você não está citando sua variável. Isso significa que um nome de arquivo com espaço em branco será tratado como arquivos separados. A regra geral é que você deve sempre citar suas variáveis, a menos que você tenha uma boa razão para não fazê-lo.
Dito isso, aqui está uma versão simplificada do seu script:
#!/usr/bin/env bash
shopt -s nullglob
for f in /tank/test/*txt
do
[[ -n $(getfattr -n user.comment "$f" 2>/dev/null) ]] ||
setfattr -n user.comment -v "$(md5sum "$f")" "$f"
done
Usar shell globs, como você fez, geralmente é mais simples e mais limpo, mas veja como fazer isso com find
:
find /tank/test/ -type f -name '*.txt' -print0 |
while IFS= read -r -d '' f
do
[[ -n $(getfattr -n user.comment "$f" 2>/dev/null) ]] ||
setfattr -n user.comment -v "$(md5sum "$f")" "$f"
done