J'utilise rm
dans un script BASH pour supprimer de nombreux fichiers. Parfois, les fichiers ne sont pas présents, il signale donc de nombreuses erreurs. Je n'ai pas besoin de ce message. J'ai cherché dans la page de manuel une commande pour rendre rm
silencieux, mais la seule option que j'ai trouvée est -f
, qui d'après la description, "ignorer les fichiers inexistants, ne jamais demander", semble être le bon choix, mais le nom ne semble pas convenir , donc je crains que cela puisse avoir des conséquences inattendues.
- L'
-f
option est-elle la bonne façon de faire tairerm
? Pourquoi n'est-il pas appelé-q
? - Cette option fait-elle autre chose?
Réponses:
L'utilisation principale de
-f
est de forcer la suppression des fichiers qui ne seraient pas supprimés en utilisantrm
lui-même (comme cas particulier, il "supprime" les fichiers inexistants, supprimant ainsi le message d'erreur).Vous pouvez également simplement rediriger le message d'erreur en utilisant
(ou l'équivalent de votre système d'exploitation). Vous pouvez vérifier la valeur de
$?
immédiatement après l'appelrm
pour voir si un fichier a été effectivement supprimé ou non.la source
--f
est valide pour GNU Coreutilsrm
, mais uniquement parce qu'il s'agit d'une abréviation unique pour--force
. La forme courte-f
est plus claire et plus portable.--f
voici juste une faute de frappe pour-f
.2>
?Oui,
-f
c'est l'option la plus appropriée pour cela.la source
rm
àrm -i
.-f est le bon drapeau, mais pour l'opérateur de test, pas rm
cela garantit que le fichier existe et est un fichier normal (pas un répertoire, un nœud de périphérique, etc.)
la source
if [ -f "$THEFILE" ]; then rm "$THEFILE"; fi
ce qui rend les étapes de test et de suppression de fichier explicitement séquentielles.test
etrm
. Il n'y a aucun moyen derm
pouvoir exécuter avanttest
ici. Regarder avant de sauter est une erreur courante dans la programmation simultanée - vous ne pouvez plus faire confiance au résultat du "look" lorsque vous "sautez" réellement; la solution à cela est d'utiliser des opérations de verrouillage ou atomiques. C'est précisément pourquoi vous voulezrm -f
, qui est un exemple de ce dernier.\rm -f file
ne rapportera jamais introuvable.la source
rm
(comme c'était populaire sur certains sites au début des années 1990 pour empêcher les débutants de supprimer des éléments puis d'appeler l'administrateur système pour récupérer leurs fichiers).&&
sans -f il casse une fois que le fichier n'est pas trouvé.Pour ce qui est de
rm -f
faire «autre chose», cela force (-f
est un raccourci pour--force
) la suppression silencieuse dans des situations oùrm
autrement vous demanderait une confirmation. Par exemple, lorsque vous essayez de supprimer un fichier non accessible en écriture par vous d'un répertoire que vous pouvez en écriture.la source
J'ai eu le même problème pour cshell. La seule solution que j'avais était de créer un fichier factice qui correspondait au modèle avant "rm" dans mon script.
la source
rm -f
ourm filename >&/dev/null
?