Rm

rm 選項在不存在的文件上失敗

  • October 8, 2012

GNU coreutils 8.12.197-032bb 中的man頁面將or選項描述為“忽略不存在的文件,從不提示”。如果沒有此選項,它將刪除任何現有文件,從不提示,如果任何指定文件不存在,則返回非零退出程式碼。如果任何指定的文件不存在,我想保留這些文件。最簡單的方法是什麼?rm``-f``--force

案例是安全的:如果我試圖刪除一個不存在的文件,可能是因為命令中存在無效的期望(或普通錯誤)。例如,可以通過多種方式避免名人rm -rf /usr /lib/nvidia-current/xorg/xorg/lib/nvidia-current/xorg/xorg,其中一種是這樣的選擇(顯然,除非使用者出於某種不可思議的巧合有一個目錄),另一種是使用更多行情™。然而,報價並不總是足夠的。例如,考慮ssh host '/bin/rm some paths; /bin/bash foo.sh'- 如果我忘記了分號或插入了幾乎任何其他符號,如冒號或逗號,它會嘗試刪除/bin/bashand ~/foo.sh

我使用這種東西:

mkdir DELETE && mv "some" "paths" DELETE && rm -rf DELETE

對於單個路徑:

mv /some/path DELETE && rm -rf DELETE

更好的是,rm command在單獨的命令行上鍵入:mv /some/path DELETE Enter rm -rf DELETE Enter. 這樣,rm進入 shell 歷史的唯一命令是在一個名為 的文件上DELETE,所以如果你刪除了一個文件的舊版本,你不會因為不小心按Up錯了 then 的次數而冒著刪除新版本的風險Enter

如果你想自動化一點:

mv_to_DELETE () {
 mkdir DELETE &&
 mv -- "$@" DELETE/
}
mv_to_DELETE "some" "paths"
rm -rf DELETE

引用自:https://unix.stackexchange.com/questions/50230