檔名以 - (破折號) 開頭時,rm 會誤將其視為選項參數而報錯 invalid option。標準解法有兩種:-- 終止選項解析、./ 相對路徑前綴。
$ rm -slow_query_130103.txt.gz
rm: invalid option -- s
Try 'rm ./-slow_query_130103.txt.gz' to remove the file.
Try 'rm --help' for more information.
-- (POSIX 標準)rm -- -slow_query_130103.txt.gz
-- 告訴 rm 後續參數不再解析選項,全部視為檔案路徑。
./rm ./-slow_query_130103.txt.gz
路徑以 ./ 開頭,不被視為選項。
cp, mv, ls, cat...) 均支援 -- 分隔選項與檔案。rm -- "$file" 或 rm "./$file" 防注入。rm -- "-file name.txt"。# 當前目錄
for f in -*; do rm -- "$f"; done
# 遞歸 (需 find)
find . -name '-*' -exec rm -- {} +
| 檔名特徵 | 處理範例 |
|---|---|
以 # 開頭 | rm ./\#file |
| 包含空白 | rm "file name.txt" |
| 包含換行 | rm $'file\nname.txt' |
| 唯一 inode 刪除 | find . -inum 12345 -exec rm -- {} + |