L'man
pagina di rm
in GNU coreutils 8.12.197-032bb descrive il -f
o --force
opzione come "ignora i file inesistenti, non chiedere mai". Senza questa opzione, rimuoverà tutti i file esistenti, non richiederà mai e restituirà un codice di uscita diverso da zero se uno qualsiasi dei file specificati non esisteva. Vorrei conservare i file se ce ne sono dei file specificati non esistono . Qual è il modo più semplice per farlo?
Il caso d'uso è sicurezza :Se sto cercando di rimuovere un file che non esiste, potrebbe essere perché c'è un'aspettativa non valida (o un semplice bug) nel comando. Ad esempio il famoso rm -rf /usr /lib/nvidia-current/xorg/xorg
avrebbe potuto essere evitato in molti modi, uno dei quali era una tale opzione (ovviamente a meno che l'utente per qualche incredibile coincidenza non avesse un /lib/nvidia-current/xorg/xorg
directory) e un altro è quello di Use More Quotes™. Tuttavia, le virgolette non sono sempre sufficienti. Ad esempio, considera ssh host '/bin/rm some paths; /bin/bash foo.sh'
– Se avessi dimenticato il punto e virgola o inserito praticamente qualsiasi altro simbolo come i due punti o la virgola, avrebbe tentato di rimuovere /bin/bash
e ~/foo.sh
.
Risposta accettata:
Io uso questo genere di cose:
mkdir DELETE && mv "some" "paths" DELETE && rm -rf DELETE
Per un unico percorso:
mv /some/path DELETE && rm -rf DELETE
Ancora meglio, digita il rm command
su una riga di comando separata:mv /some/path DELETE
Entra rm -rf DELETE
Entra . In questo modo, l'unico rm
il comando che entra nella cronologia della shell è su un file chiamato DELETE
, quindi se hai rimosso una vecchia versione di un file, non rischi di rimuovere la nuova versione premendo accidentalmente Su il numero sbagliato di volte quindi Invio .
Se vuoi automatizzare un po':
mv_to_DELETE () {
mkdir DELETE &&
mv -- "[email protected]" DELETE/
}
mv_to_DELETE "some" "paths"
rm -rf DELETE