J'ai un nom de répertoire foo
situé dans ~/Desktop
. Supposons que je veuille créer un répertoire à partir d'un terminal portant le même nom et se trouvant au même endroit. Lorsque j'ai essayé mkdir
, une erreur s'est produite:
mkdir: cannot create directory `/home/nux/Desktop/foo': File exists
C’est logique, mais je veux remplacer foo
s’il existe. J'ai regardé à travers man mkdir
mais aucune option ne le permet.
Alors, comment écraser le répertoire foo
?
Pourquoi mkdir
n'a-t-il pas la possibilité de le faire?
Si votre objectif est d'exécuter une commande d'une ligne qui:
~/Desktop/foo
s'il existe déjà.~/Desktop/foo
s'il n'existe pas déjà.Ensuite, vous pouvez utiliser:
rm -r ~/Desktop/foo; mkdir ~/Desktop/foo
;
est équivalent à une nouvelle ligne, mais vous permet d'exécuter plusieurs commandes sur une seule ligne (c'est-à-dire en tant que "commande unique").
-f
pour les supprimer sans demander à l'utilisateur de manière interactive. C'est bon, mais je recommande d'être particulièrement prudent avec rm -rf ...
. Voir man rm
pour plus de détails.rm
pour terminer avant l'exécution de la commande mkdir
; c'est la raison pour laquelle utiliser ;
au lieu de &
. (Une commande précédant &
s'exécute de manière asynchrone en arrière-plan.)mkdir
pour s'exécuter lorsque la commande rm
réussit. c'est la raison pour laquelle utiliser ;
au lieu de ||
.mkdir
pour s'exécuter lorsque la commande rm
échoue (généralement, une erreur signifierait que le répertoire n'existait pas déjà); c'est la raison pour laquelle utiliser ;
au lieu de &&
.rm
peut échouer même si le répertoire existait déjà. Dans ce cas, la commande mkdir
échouera également, mais les messages d'erreur auront un sens et il n'y aura probablement pas besoin d'ajouter une étape intermédiaire pour vérifier l'existence de foo
avant d'essayer de le créer.Voir .2.3 Listes de commandes dans le Manuel de référence Bash pour plus d'informations et d'explications sur les opérateurs ;
, &
, ||
et &&
.
Comme muru a suggéré (et Rinzwind a élaboré ), je vous recommande de regarder dans rsync
pour voir si cela répondra à vos besoins de sauvegarde. Il existe quelques guides utiles supplémentaires sur le page de documentation rsync , ainsi que le présent guide Ubuntu rsync .
pourquoi mkdir n'a pas cette option?
mkdir
crée des répertoires (le "mk" signifie "make" ). Car supprimer également récursivement les répertoires et tous les fichiers qu’ils contiennent serait mauvais, car cela violerait le principe du moindre étonnement d’une manière qui conduirait probablement à une perte de données.
rmdir
ne supprime même pas les répertoires contenant des fichiers (autres que des répertoires). rm
a une option -r
, ce qui est logique dans la mesure où rm
supprime les fichiers (c’est son objectif; le danger inhérent est donc intuitif et les utilisateurs doivent généralement faire attention à exécuter les commandes rm
.
Non, il n'y a pas de commande unique pour faire ce que vous demandez.
Pourquoi?
C’est la philosophie Unix: écrire des programmes qui font une chose et le font bien. Écrire des programmes pour travailler ensemble.1
Dans ce cas, les commandes mkdir
et rm
font ce que vous souhaitez et fonctionnent bien ensemble, puisque rm -r
supprimera également le répertoire. Par la suite, mkdir
le créera.
1L'art de la programmation Unix, Eric S. Raymond citant lui-même Doug McIlroy.
La commande permettant de supprimer un répertoire est rm
. Donc, vous avez besoin de 2 commandes.
rm -r ~/Desktop/foo/
mkdir ~/Desktop/foo/
Comme indiqué dans les commentaires, vous pouvez les chaîner avec ;
(= faire les deux même si 1st échoue) ou &&
(= seulement mkdir lorsque la machine n'échoue pas).
Le -r
sert à supprimer des répertoires. La 1ère commande supprime également TOUT le contenu du répertoire. Si ce n'est PAS votre intention, rm et mkdir ne sont pas ce que vous recherchez: les autorisations sont chmod
et chown
.
pourquoi mkdir n'a pas cette option?
Ambiguïté. mkdir
signifie créer un répertoire. Pas supprimer et faire répertoire. Et comme la commande rm
sert à supprimer des éléments, il n’est pas nécessaire que rmdir
soit capable de supprimer un répertoire.