man
stránku rm
v GNU coreutils 8.12.197-032bb popisuje -f
nebo --force
možnost jako „ignorovat neexistující soubory, nikdy se nevyptávat“. Bez této volby odstraní všechny existující soubory, nikdy se nevyzve a vrátí nenulový kód ukončení, pokud některý ze zadaných souborů neexistuje. Chci zachovat soubory, pokud existují ze zadaných souborů neexistují . Jaký je nejjednodušší způsob, jak to udělat?
Případem použití je bezpečnost :Pokud se pokouším odstranit soubor, který neexistuje, může to být způsobeno tím, že příkaz obsahuje neplatné očekávání (nebo obyčejnou chybu). Například slavný rm -rf /usr /lib/nvidia-current/xorg/xorg
se dalo zabránit mnoha způsoby, jedním z nich je taková možnost (samozřejmě pokud uživatel nějakou neuvěřitelnou shodou okolností neměl /lib/nvidia-current/xorg/xorg
adresář) a další bytostí Use More Quotes™. Ne vždy však citáty stačí. Zvažte například ssh host '/bin/rm some paths; /bin/bash foo.sh'
– Pokud bych zapomněl středník nebo vložil téměř jakýkoli jiný symbol, jako je dvojtečka nebo čárka, pokusilo by se to odstranit /bin/bash
a ~/foo.sh
.
Přijatá odpověď:
Používám tyto věci:
mkdir DELETE && mv "some" "paths" DELETE && rm -rf DELETE
Pro jednu cestu:
mv /some/path DELETE && rm -rf DELETE
Ještě lepší je zadat rm command
na samostatném příkazovém řádku:mv /some/path DELETE
Zadejte rm -rf DELETE
Zadejte . Tímto způsobem je jediný rm
příkaz, který se dostane do vaší historie shellu, je v souboru s názvem DELETE
, takže pokud jste odstranili starou verzi souboru, neriskujete odstranění nové verze náhodným stisknutím Nahoru nesprávný počet opakování a pak Enter .
Pokud chcete trochu automatizovat:
mv_to_DELETE () {
mkdir DELETE &&
mv -- "[email protected]" DELETE/
}
mv_to_DELETE "some" "paths"
rm -rf DELETE