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