J'ai un script bash que je souhaite supprimer des fichiers de divers répertoires. Souvent, ils ne seront pas là parce qu'ils n'ont pas été générés et c'est très bien. Existe-t-il un moyen d'obtenir que le script ne signale pas cette erreur, mais si rm a une autre sortie pour le signaler?
Sinon, existe-t-il une meilleure commande à utiliser pour supprimer le fichier qui sera moins bruyant?
Si votre exigence est de
rm
ne pas se plaindre de fichiers manquants, mais que vous souhaitez également toute autre sortierm
, ma suggestion serait de tester d'abord l'existence du fichier cible, et d'appeler uniquementrm
( sans l'-f
indicateur) si le fichier existe réellement.L'appel
rm -f
sur un fichier qui, par exemple, ne dispose pas d'autorisations d'écriture utilisateur, supprimera le fichier et n'émettra pas non plus l'invite normale pour ce scénario.Dans le cas où vous vouliez utiliser la même idée avec plusieurs fichiers, je créerais une définition de fonction, comme:
Utilisez-le comme:
qrm file1 file2-does-not-exist *.txt etc here
la source
Vous avez déclaré que vous souhaitiez toujours voir d'autres sorties de la
rm
commande lorsque vous l'exécutez, mais l'utilisation de l'-f
option les supprimera. Vous devrez filtrer STDERR pour ce que vous voulez, ce qui est un peu délicat, étant donné que vous voulez que tout le reste s'affiche.Vous voudrez utiliser une commande comme celle-ci:
Commande expliquée:
-f
l'argument est de forcer et de ne pas demander de confirmation ou d'erreurs3>&1 1>&2 2>&3 3>&-
consiste à basculer entre STDOUT et STDERR pour le filtrage (vous pouvez en savoir plus ici si vous le souhaitez| grep -v 'No such file or directory'
filtre le message que vous ne voulez pas voirMaintenant, si vous vouliez simplement supprimer complètement les messages d'erreur, vous pouvez exécuter la commande suivante:
Cette commande redirige STDERR vers / dev / null afin que vous ne le voyiez pas lorsque vous exécutez la commande.
la source
rm
sans-v
jamais sortir sur stdout, seulement stderr, donc dans ce cas, vous pourriez juste2>&1 | grep
sans la danse qui est utile plus généralement,Comme alternative, vous pouvez utiliser la
find
commande avec l'-delete
option. Cela ne supprimera (évidemment) que les fichiers qu'il trouve afin de ne jamais avertir s'il n'y en a pas. Un exemple pourrait être:qui rechercherait le
/var/log/triffids/
répertoire et supprimerait tous les fichiers avec le.log
suffixe qui n'ont pas été modifiés depuis plus de 30 jours.C'est toujours une bonne idée d'exécuter ces commandes sans l'
-delete
option d'abord, pour vous assurer qu'il trouve les fichiers que vous attendez.la source
Cochez l' option
--force
(-f
) derm
:la source
C'est un hack, mais vous pouvez toujours
touch
supprimer le fichier. S'il n'existe pas, il sera créé, vousrm
pouvez donc le supprimer.la source
Vous pouvez utiliser
-f
comme bon vous semble, selon la page de manuel:ne vous demandera rien et fera exactement ce que vous voulez.
la source
Il y a deux façons principales: Si vous ajoutez l'option -f, elle n'affichera pas l'erreur "n'existe pas" et deux: (fonctionne pour presque toutes les commandes) au lieu de simplement faire "la commande" faire "la commande 2> / dev / null "où" la commande "est la commande que vous effectuez.
la source