L'man
page de rm
dans GNU coreutils 8.12.197-032bb décrit le -f
ou --force
comme "ignorer les fichiers inexistants, ne jamais demander". Sans cette option, il supprimera tous les fichiers existants, ne demandera jamais et renverra un code de sortie différent de zéro si l'un des fichiers spécifiés n'existait pas. J'aimerais préserver les fichiers s'il y en a des fichiers spécifiés n'existent pas . Quel est le moyen le plus simple de procéder ?
Le cas d'utilisation est la sécurité :Si j'essaie de supprimer un fichier qui n'existe pas, c'est peut-être parce qu'il y a une attente non valide (ou un simple bogue) dans la commande. Par exemple le fameux rm -rf /usr /lib/nvidia-current/xorg/xorg
aurait pu être évité de plusieurs façons, l'une d'elles étant une telle option (évidemment à moins que l'utilisateur, par une incroyable coïncidence, n'ait un /lib/nvidia-current/xorg/xorg
répertoire), et un autre étant d'utiliser plus de citations ™. Cependant, les citations ne suffisent pas toujours. Par exemple, considérez ssh host '/bin/rm some paths; /bin/bash foo.sh'
- Si j'avais oublié le point-virgule ou inséré à peu près n'importe quel autre symbole comme deux-points ou une virgule, il aurait essayé de supprimer /bin/bash
et ~/foo.sh
.
Réponse acceptée :
J'utilise ce genre de choses :
mkdir DELETE && mv "some" "paths" DELETE && rm -rf DELETE
Pour un seul chemin :
mv /some/path DELETE && rm -rf DELETE
Mieux encore, tapez la rm command
sur une ligne de commande séparée :mv /some/path DELETE
Entrez rm -rf DELETE
Entrez . De cette façon, le seul rm
la commande qui entre dans l'historique de votre shell se trouve dans un fichier appelé DELETE
, donc si vous avez supprimé une ancienne version d'un fichier, vous ne risquez pas de supprimer la nouvelle version en appuyant accidentellement sur Haut le mauvais nombre de fois puis Entrée .
Si vous souhaitez automatiser un peu :
mv_to_DELETE () {
mkdir DELETE &&
mv -- "[email protected]" DELETE/
}
mv_to_DELETE "some" "paths"
rm -rf DELETE