當檔案系統編碼不一致(如 UTF-8 環境下建立 Big5 檔名)或檔案系統受損,會出現無法以一般指令(rm、mv)操作的亂碼檔名。利用 inode 編號 可繞過檔名直接操作檔案實體。
ls -li
# 輸出範例
920533 -rw-r--r-- 1 root root 0 Jul 27 08:27 ????file
918587 -rw-r--r-- 1 root root 0 Jul 27 08:26 ???
第一欄即為 inode 編號(920533、918587)。
# 先確認找到的檔案
find . -inum 920533
# 輸出:./????file
# 確認無誤後刪除
find . -inum 920533 -exec rm -f {} \;
-inum N:比對 inode 編號。-exec rm -f {} \;:對每個結果執行 rm -f。# 列出所有 inode 供人工確認
ls -li | grep -E '^\s*[0-9]+\s+.*\?\?'
# 或寫腳本互動式刪除
for inode in $(ls -li | awk '/\?\?/ {print $1}'); do
find . -inum "$inode" -exec rm -iv {} \;
done
-r)。rm 會移除目錄項但磁碟空間不釋放,直到進程關閉檔案描述符。
透過 ls -li 取得 inode,再配合 find -inum -exec rm,即可精準刪除任何無法輸入檔名的亂碼檔案,避免誤刪正常檔案。