Je trouve que la page de manuel manque un peu de détails dans ce cas. L' -foption rma en fait plusieurs cas d'utilisation:
Pour éviter un code de sortie d'erreur
Pour éviter d'être invité
Pour contourner les vérifications d'autorisation
Vous avez raison de dire qu'il est inutile de supprimer un fichier inexistant, mais dans les scripts, il est vraiment pratique de pouvoir dire "Je ne veux pas de ces fichiers, supprimez-les si vous les trouvez, mais ne me dérangez pas s'ils ne n'existent pas ". Certaines personnes utilisent le set -edans leur script pour qu'il s'arrête en cas d'erreur (pour éviter tout dommage supplémentaire que le script peut causer), et rm -rf /home/my/garbagec'est plus facile que if [[ -f /home/my/garbage ]]; then rm -r /home/my/garbage; fi.
Remarque sur les vérifications des autorisations: pour supprimer un fichier, vous devez disposer d'une autorisation d'écriture dans le répertoire parent , pas sur le fichier lui-même. Disons donc qu'il y a un fichier appartenant rootà votre répertoire personnel et que vous n'y avez pas sudoaccès, vous pouvez toujours supprimer le fichier en utilisant l' -foption. Si vous utilisez Git, vous pouvez voir que Git ne laisse pas l'autorisation d'écriture sur les fichiers objets qu'il crée:
-r--r--r-- 1 phunehehe phunehehe 62 Aug 31 15:08 testdir/.git/objects/7e/70e8a2a874283163c63d61900b8ba173e5a83c
Donc, si vous utilisez rm, la seule façon de supprimer un référentiel Git sans utiliser rootest d'utiliser rm -rf.
-fn'évite pas un code de sortie d'erreur. Si rmtente et échoue de supprimer un fichier existant, il renverra un code d'erreur.
Gilles 'SO- arrête d'être méchant'
J'ai rétrogradé cette réponse car "Pour éviter un code de sortie d'erreur" doit être écrit comme "Pour éviter un code de sortie d'erreur dans le cas où il n'y a aucun opérande de fichier ou que les opérandes de fichier n'existent pas". Comme cette réponse est écrite maintenant, elle est fausse.
Harold Fischer
6
L' -foption supprime les invites de confirmation lors de la suppression d'un fichier en lecture seule. Il supprime également les erreurs lorsqu'un ou plusieurs fichiers fournis n'existent pas.
L' -foption est utile lorsque vous savez que certains des fichiers que vous supprimez peuvent être en lecture seule et que vous ne souhaitez pas être invité à le faire.
L' foption est également utile lorsque vous souhaitez supprimer certains fichiers au cas où ils existent et que vous ne voulez pas vous soucier de leur existence ou non. Ceci est très couramment utilisé dans les makefiles , pour créer une commande qui supprime les fichiers qui peuvent être régénérés à partir des fichiers source. Par exemple, si foo.opeut être reconstruit à partir de foo.c, bar.opeut être reconstruit à partir de bar.c, et myapppeut être reconstruit à partir de foo.oet bar.o, alors la cible du makefile
clean:
rm -f *.o myapp
supprime myapp, foo.oet bar.os'ils existent et ne se plaint pas si aucun d'entre eux n'existe.
L'inclusion -fdans les instructions de suppression d'une arborescence de répertoires n'est pas nécessaire dans la plupart des cas. Cela peut être justifié car si vous êtes sûr de vouloir supprimer cette arborescence de répertoires indépendamment de ce qu'elle contient, vous pouvez spécifier -fpour éviter d'être invité au cas où certains fichiers sont en lecture seule. Cependant, les gens qui disent courir ne rm -rffont souvent que répéter une incantation mystique pour se débarrasser de quelque chose, peu importe si les options -ret -fsont réellement nécessaires. Si les options ne sont pas nécessaires, elles ne sont pas recommandées, car elles augmentent le risque qu'une faute de frappe dans l'argument détruise quelque chose d'important.
Je vois généralement l' -futilisation avec rmquand la rmcommande est aliasée de sorte qu'elle inclut le -icommutateur interactif. Le -fcommutateur contrecarre le -i.
Exemple
Simulez le problème avec des rmalias rm -i.
$ alias rm='rm -i'
Faites de fausses données
$ touch afile
Essayez maintenant de le supprimer en utilisant la version alias de rm
$ rm afile
rm: remove regular empty file `afile'?
Essayez maintenant d'utiliser -f
$ rm -f afile
$
Autorisations
Je crois également qu'il existe des cas où vous avez un accès en lecture seule à un répertoire et lorsque vous essayez de supprimer les fichiers et / ou sous-répertoires dans ce répertoire, vous serez confronté à une invite similaire "êtes-vous sûr?". L'utilisation de -fse débarrasse d'avoir à dire oui.
En utilisant l'alias, cela a un certain sens. Et votre réponse correspond à ce que je viens de montrer dans les pages de manuel openbsd. Bien que openbsd ne soit pas GNU / Linux, il semble qu'il décrit ce que vous venez de dire. Voici le lien si quelqu'un veut vérifier: [link] openbsd.org/cgi-bin/…
saliarosaurus
Avec bash, vous pouvez toujours faire \rmpour exécuter sans alias (\ étant un raccourci vers le commandconstruit). Je trouve que la meilleure utilisation -fest dans les scripts shell où vous avez quelque chose comme un fichier de verrouillage qui peut ou non exister, -farrête l' rm: cannot remove 'file': No such file or directoryavertissement.
Drav Sloan
@DravSloan Oui, cela a également du sens. Merci pour vos réponses à la fois Drav Sloan et slm
saliarosaurus
J'utilise rm -fsouvent sur la cleancible en Makefiles
Alex
-ice n'est pas vraiment de quoi il -fs'agit, c'est plutôt un cas de bord.
-f
n'évite pas un code de sortie d'erreur. Sirm
tente et échoue de supprimer un fichier existant, il renverra un code d'erreur.L'
-f
option supprime les invites de confirmation lors de la suppression d'un fichier en lecture seule. Il supprime également les erreurs lorsqu'un ou plusieurs fichiers fournis n'existent pas.L'
-f
option est utile lorsque vous savez que certains des fichiers que vous supprimez peuvent être en lecture seule et que vous ne souhaitez pas être invité à le faire.L'
f
option est également utile lorsque vous souhaitez supprimer certains fichiers au cas où ils existent et que vous ne voulez pas vous soucier de leur existence ou non. Ceci est très couramment utilisé dans les makefiles , pour créer une commande qui supprime les fichiers qui peuvent être régénérés à partir des fichiers source. Par exemple, sifoo.o
peut être reconstruit à partir defoo.c
,bar.o
peut être reconstruit à partir debar.c
, etmyapp
peut être reconstruit à partir defoo.o
etbar.o
, alors la cible du makefilesupprime
myapp
,foo.o
etbar.o
s'ils existent et ne se plaint pas si aucun d'entre eux n'existe.L'inclusion
-f
dans les instructions de suppression d'une arborescence de répertoires n'est pas nécessaire dans la plupart des cas. Cela peut être justifié car si vous êtes sûr de vouloir supprimer cette arborescence de répertoires indépendamment de ce qu'elle contient, vous pouvez spécifier-f
pour éviter d'être invité au cas où certains fichiers sont en lecture seule. Cependant, les gens qui disent courir nerm -rf
font souvent que répéter une incantation mystique pour se débarrasser de quelque chose, peu importe si les options-r
et-f
sont réellement nécessaires. Si les options ne sont pas nécessaires, elles ne sont pas recommandées, car elles augmentent le risque qu'une faute de frappe dans l'argument détruise quelque chose d'important.la source
Le
-i
passage àrm
Je vois généralement l'
-f
utilisation avecrm
quand larm
commande est aliasée de sorte qu'elle inclut le-i
commutateur interactif. Le-f
commutateur contrecarre le-i
.Exemple
Simulez le problème avec des
rm
aliasrm -i
.Faites de fausses données
Essayez maintenant de le supprimer en utilisant la version alias de
rm
Essayez maintenant d'utiliser
-f
Autorisations
Je crois également qu'il existe des cas où vous avez un accès en lecture seule à un répertoire et lorsque vous essayez de supprimer les fichiers et / ou sous-répertoires dans ce répertoire, vous serez confronté à une invite similaire "êtes-vous sûr?". L'utilisation de
-f
se débarrasse d'avoir à dire oui.la source
\rm
pour exécuter sans alias (\ étant un raccourci vers lecommand
construit). Je trouve que la meilleure utilisation-f
est dans les scripts shell où vous avez quelque chose comme un fichier de verrouillage qui peut ou non exister,-f
arrête l'rm: cannot remove 'file': No such file or directory
avertissement.rm -f
souvent sur laclean
cible enMakefile
s-i
ce n'est pas vraiment de quoi il-f
s'agit, c'est plutôt un cas de bord.