我正在尝试为每个没有 user.comment 扩展属性的文件生成一个 md5,然后在文件的扩展属性中解析该 md5。我的脚本运行正常,但仅适用于没有空格的文件名。
cd /tank/test
shopt -s nullglob
for f in *.txt
do
if [[ -n $(getfattr -n user.comment "$f") ]]; then
continue
else
md5=($(md5sum $f))
setfattr -n user.comment -v "$md5" "$f"
fi
done
我看到很多人使用该find
命令,但我不知道如何让它适合我的情况。
答案1
你的主要问题是,正如@wigy 指出的那样,您没有引用变量。这意味着带有空格的文件名将被视为单独的文件。一般的经验法则是您应该总是引用你的变量,除非你有很好的理由不这样做。
也就是说,这是您的脚本的简化版本:
#!/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
正如您所做的那样,使用 shell globs 通常更简单、更干净,但下面介绍如何使用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