我試圖為每個沒有 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 glob 通常更簡單、更乾淨,但具體方法如下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