Supprimer le fichier sans demander

89

Comment puis-je supprimer un fichier sans demander à l'utilisateur s'il accepte de supprimer le fichier? J'écris un script shell et utilise la fonction rm, mais il me demande "supprimer le fichier normal?" et je n'ai vraiment pas besoin de ça. Je vous remercie.

Hey
la source
5
rm -f, yes | rmEt ainsi de suite, mais cela appartient à SU.
4
rmne montre pas un "supprimer un fichier normal?" invite par défaut. Vous devez l'avoir aliasé rm -iou défini comme une fonction. Je suis surpris que l'alias soit visible dans votre script. Exécutez-vous le script ( ./foo.sh) ou recherchez-vous ( . foo.shou source foo.sh)?
Keith Thompson

Réponses:

104

Vous pourriez avoir rmaliasé pour rm -ialors essayez ceci:

/bin/rm -f file.log

Pour voir vos alias, vous pouvez exécuter alias.

chown
la source
7
Vous pouvez également utiliser command rm ...ou \rm ...ignorer l'alias / la fonction
glenn jackman
6
Il a été soutenu qu'avoir un rmalias rm -iest une mauvaise idée. La rmcommande, par défaut, en silence supprime le fichier nommé. En y faisant référence rm -i, vous pouvez prendre l’habitude de ne pas vérifier soigneusement avant d’appuyer sur Entrée, en fonction de l’invite interactive à laquelle vous souhaitez vous enregistrer. Ensuite, vous tapez rm some-important-filedans un environnement sans alias.
Keith Thompson
@ Keith C'est très vrai, je n'ai personnellement que pseudonyme de rm à rm -v
chown
1
Si "rm" est une fonction (au lieu d'un alias), cette réponse devrait fonctionner. Et la unsetcommande bash pourrait être intéressante
Xen2050
56

L'indicateur de force supprime toutes les invites;

rm -f {file}

lynks
la source
2
C'est ce que je recherche, pas la réponse acceptée.
Gsamaras
30

Que la force soit avec toi - rm -f

manojlds
la source
5
J'ai déjà voté la réponse de lynks, et c'est exactement la même chose. Il suffit de voter pour le sens de l'humour
rain_
J'ai voté à la fois le commentaire ET la réponse simplement parce que quelqu'un avait réellement trouvé le sens de l'humour sur SO ...
Mac
5

Dans un script shell, vous voudriez utiliser, rm -f <filename>mais vous avez également la possibilité de supprimer l' -ioption implicite pour votre environnement en entrant unalias rmdans votre shell (ou votre profil).

Musannif Zahir
la source
unalias rmne fonctionne pas dans CentOS? Amazon Linux?
Suncatcher
5

le yesprogramme répond à plusieurs reprises par oui à toutes les invites. afin que vous puissiez le diriger vers le rmprogramme interactif pour obtenir également l'effet souhaité.

yes | rm <filename>

à l'inverse, si vous ne voulez pas faire quelque chose d'interactif, vous pouvez faire

yes n | <something interactive>

et qui répètera 'n' sur le flux d'entrée (en répondant non à des questions)

Mholm815
la source
L' yes noption ne fonctionne pas pour moi. Bien que j'utilise yes n | rm file.txt, il supprime le fichier même s'il est protégé correctement.
iammilind
5

Si vous disposez des autorisations requises pour supprimer le fichier et que vous ne souhaitez pas recevoir d'invite, procédez comme suit (-f = force):

rm -f file

Si vous n'avez pas les autorisations pour le fichier, vous devrez utiliser:

sudo rm -f file
Kassym Dorsel
la source
1
Le "supprimer le fichier régulier?" invite implique que ce n'est pas un problème d'autorisations.
Keith Thompson
4
\rm file

La barre oblique inverse \contourne les alias.

teknopaul
la source
1
"\" est une barre oblique inverse, que voulez-vous dire?
Cand3r
Oui, utiliser rm sans alias, ce qui entraîne le préfixe indésirable des dialogues de confirmation avec \.
teknopaul
1

Outre le -fparamètre, vous pouvez également utiliser la findcommande, par exemple

find -name file.log -delete
Kenorb
la source
0

Actuellement, je travaille sur un système où le shell bash a reçu la définition de la commande rm en tant que fonction dans l'un des fichiers de configuration globaux:

 rm  () { /bin/rm -i ${1+"$@"}; }

Par conséquent, aucune des réponses ci-dessus concernant les alias n'a fonctionné. Pour contrer le comportement ennuyeux, je désactive la fonction rm dans mon fichier .bashrc

 unset -f rm

J'ai eu un problème similaire à celui du premier match. Cependant, je n'ai trouvé aucune réponse mentionnant la possibilité rmcachée par une fonction shell. J'ai donc ajouté la réponse ici dans l'espoir que cela aiderait quelqu'un confronté au même type de problème.

Taper /bin/rmou rm -ftout le temps est peu pratique et peut avoir de mauvaises conséquences (dans le cas de rm -f).

choucas
la source
Cela a peut-être résolu votre problème, mais cela ne répond pas à la question.
suspectus
Est-ce que la réponse choisie - appeler ne /bin/rmmarche pas? Si j'ai une fonction dans bash et un fichier exécutable avec le même nom dans le répertoire en cours, ajouter simplement ./devant le nom appellera le fichier - pas la fonction. PS - J'ai ajouté un commentaire à la réponse sélectionnée à propos d'une fonction &unset
Xen2050
Oui ça /bin/rmmarche. Faire cela unsetélimine le besoin de taper le chemin complet.
daw
0

Si votre rmest associé à rm -i, utilisez unalias rm;

N'utilisez pas rm -fdirectement sauf si vous voulez vraiment supprimer beaucoup de fichiers protégés en écriture. Il doit y avoir une très bonne raison d'utiliser -f.

Toutefois, si vous avez beaucoup de fichiers protégés en écriture, vous préférerez peut- rsync -r --delete empty/ removed_dir/être une vitesse plus rapide.

Zhu Jinxuan
la source
0

Ma façon préférée de faire ceci est simplement d'utiliser la commandcommande dans bash, de la même manière que vous utilisez sudo. Cela exécutera votre commande sans alias, tout comme l'exécuter par /bin/rm( rmest probablement alias comme rm -i).

Exemple:

command rm -f /tmp/file.txt
PatrykMilewski
la source
0
rm -Rf <folder-to-be-deleted>

-R: récursif f: force, pas d'invite

Mdivk
la source