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