遇到亂碼檔名(如含特殊字元、控制字元)無法用一般 rm 刪除時,可透過 inode 編號 精準定位刪除,支援檔案與目錄(含非空目錄),並可批次處理。
ls -i # 列出當前目錄檔案 inode
ll -i # 詳細模式顯示 inode
輸出範例:17956913 -rw-r--r-- 1 oracle oinstall 0 Jan 18 20:24 1?.txt,第一欄即 inode。
find . -inum 17956913 -exec rm {} \;
或先改名再刪:
find . -inum 17956913 -exec mv {} normal_name.txt \;
rm normal_name.txt
find . -inum 18612483 -exec rm -rf {} \;
執行後可能提示 No such file or directory,實際已刪除成功(find 先找到 inode 再執行 rm,rm 執行時目錄項已消失)。
使用 for 迴圈:
# 批次刪除檔案
for n in 22413315 22413314; do find . -inum $n -delete; done
# 批次刪除目錄
for n in 22413315 22413314; do find . -inum $n -exec rm -rf {} \;; done
-exec cmd {} \; 中 {} 為找到的路徑,\; 為命令結束符。rm -rf 不可逆。