web-dev-qa-db-fra.com

Comment empêcher rm de signaler qu'un fichier n'a pas été trouvé?

J'utilise rm dans un script BASH pour supprimer de nombreux fichiers. Parfois, les fichiers ne sont pas présents, ce qui génère de nombreuses erreurs. Je n'ai pas besoin de ce message. J'ai cherché dans la page de manuel une commande pour rendre rm silencieuse, mais la seule option que j'ai trouvée est -f, qui, de la description, "ignore les fichiers inexistants, jamais invite", semble être la bonne choix, mais le nom ne semble pas correspondre, alors je crains que cela puisse avoir des conséquences imprévues.

  • Est-ce que l'option -f est le bon moyen de faire taire rm? Pourquoi ne s'appelle-t-il pas -q?
  • Cette option fait-elle autre chose?
134
Village

La principale utilisation de -f consiste à forcer la suppression de fichiers qui ne seraient pas supprimés à l'aide de rm par lui-même (dans un cas spécial, elle "supprime" les fichiers inexistants, supprimant ainsi le message d'erreur). .

Vous pouvez également simplement rediriger le message d'erreur à l'aide de

$ rm file.txt 2> /dev/null

(ou l'équivalent de votre système d'exploitation). Vous pouvez vérifier la valeur de $? immédiatement après avoir appelé rm pour voir si un fichier a effectivement été supprimé ou non.

186
chepner

Oui, -f est l'option la plus appropriée pour cela.

62
Satya

-f est le bon drapeau, mais pour l'opérateur de test, pas rm

[ -f "$THEFILE" ] && rm "$THEFILE"

cela garantit que le fichier existe et est un fichier normal (pas un répertoire, un nœud de périphérique, etc.)

22
technosaurus

\rm -f file ne signalera jamais non trouvé.

10
vimdude

En ce qui concerne rm -f faire "toute autre chose", il force (-f est un raccourci pour --force) la suppression silencieuse dans les situations où rm vous demanderait autrement une confirmation. Par exemple, lorsque vous essayez de supprimer un fichier que vous ne pouvez pas écrire dans un répertoire que vous pouvez écrire.

4
Idelic