md5sum 弄亂帶有空格的檔名

md5sum 弄亂帶有空格的檔名

我試圖為每個沒有 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

相關內容