201 votes

vérifier si un répertoire existe et le supprimer en une seule commande unix

Est-il possible de vérifier si un répertoire existe et de le supprimer si c'est le cas, sous Unix en utilisant une seule commande ? J'ai une situation où j'utilise la tâche ANT 'sshexec' où je ne peux exécuter qu'une seule commande sur la machine distante. Et j'ai besoin de vérifier si un répertoire existe et de le supprimer...

0 votes

Pourquoi ne pas simplement utiliser rmdir ? si le répertoire n'existe pas, cela échouera.

9 votes

Il échouera. Et une erreur dans mon ANT script. Ce qui fera planter ma construction.

2 votes

Utilisation de mkdir -p ignorera les erreurs s'il existe déjà.

317voto

Dominic Mitchell Points 5719

Pourquoi ne pas simplement utiliser rm -rf /some/dir ? Cela va supprimer le répertoire s'il est présent, sinon ne rien faire. Contrairement à rm -r /some/dir cette version de la commande ne plantera pas si le dossier n'existe pas.

21 votes

Je pense que la question initiale visait à signifier : effectuer la suppression uniquement si le fichier/répertoire existe ou non. Cette commande peut fonctionner et produire des résultats similaires, mais il est plus logique de faire un test avant la commande.

8 votes

@AnkurChauhan +1, j'ai un avertissement si le répertoire n'existe pas.

14 votes

Ce n'est pas la réponse à la question.

235voto

Nick G Points 1689

En supposant que $WORKING_DIR est placé dans le répertoire... cette ligne unique devrait le faire :

if [ -d "$WORKING_DIR" ]; then rm -Rf $WORKING_DIR; fi

(sinon, remplacez simplement par votre répertoire)

40voto

sinelaw Points 6641

Essayez :

bash -c '[ -d my_mystery_dirname ] && run_this_command'

Cela fonctionnera si vous pouvez exécuter bash sur la machine distante....

Dans bash, [ -d something ] vérifie s'il existe un répertoire appelé 'quelque chose', et renvoie un code de succès s'il existe et s'il s'agit d'un répertoire. L'enchaînement de commandes avec && exécute la deuxième commande uniquement si la première a réussi. Ainsi, [ -d somedir ] && command exécute la commande uniquement si le répertoire existe.

0 votes

Oui, et essayez-le dans une coquille pour vous assurer que c'est ce que vous voulez.

0 votes

Je veux d'abord voir si cela fonctionne localement et ensuite je peux envoyer la commande à distance. Est-ce que je suis en train de dire qu'il faut vérifier le répertoire "/test" juste [ -d /test ] && mkdir /test ?

1 votes

Il devrait donner une erreur si elle existe, parce qu'il vérifie si le répertoire existe, et si oui il essaie de le créer. C'est ce qu'il fait pour moi (je viens de tester). Il ne devrait pas créer de répertoire. Puisque vous voulez EFFACER, vous avez probablement besoin de : [ -d /test ] && rmdir /test (ou rm -rf /test s'il ne sera pas vide et que vous voulez supprimer tout le contenu)

16voto

Akhilesh Joshi Points 91

Voici une autre réplique :

[[ -d /tmp/test ]] && rm -r /tmp/test
  • && signifie que l'instruction qui suit n'est exécutée que si l'instruction précédente s'est bien exécutée (code de sortie zéro). précédente a été exécutée avec succès (code de sortie zéro)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X