GNU/Linux >> Znalost Linux >  >> Linux

Možnost Rm selhat u neexistujících souborů?

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

Linux
  1. Rekurzivně mazat soubory bezpečně:skartace

  2. Rsync s možností Delete, ale zachovat to, co je smazáno?

  3. Odstraňte stažené aktualizace systému Windows

  1. Linux Odstraňte soubory a adresáře

  2. .o soubory vs. .a soubory

  3. Odstraňte odpovídající soubory ve všech podadresářích

  1. Smažte všechny soubory kromě 1000 náhodných souborů v adresáři

  2. Smazat celý /var/log?

  3. Odstraňte soubory pomocí logrotate