Ihr Hauptproblem ist, wie @wigy darauf hinweist, dass Sie Ihre Variable nicht zitieren. Dies bedeutet, dass ein Dateiname mit Leerzeichen als separate Dateien behandelt wird. Als Faustregel gilt, dass Sie das tun sollten Ihre Variablen immer angeben denn, Sie haben einen guten Grund, dies nicht zu tun.
Das heißt, hier ist eine vereinfachte Version Ihres Skripts:
#!/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
Mit Shell Kleckse, wie Sie getan haben, ist in der Regel einfacher und sauberer, aber hier ist, wie es zu tun mit 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