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 au même emplacement. Quand j'ai essayé, mkdir
cela a donné une erreur:
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 il n'y a aucune option pour faire ça.
Alors, comment écraser le foo
répertoire?
Pourquoi n'a pas mkdir
d'option pour le faire?
foo
comme pour en supprimer tout le contenu?mkdir
a une-p
option qui ignore si le répertoire existe.Réponses:
Si votre objectif est d'exécuter une commande sur une ligne qui:
~/Desktop/foo
s'il existe déjà.~/Desktop/foo
s'il n'existe pas déjà.Ensuite, vous pouvez utiliser:
;
est équivalent à un saut de ligne, mais il vous permet d'exécuter plusieurs commandes sur une seule ligne (c'est-à-dire comme une "commande unique").-f
indicateur pour les supprimer sans inviter l'utilisateur de manière interactive. C'est correct, mais je recommande d'être particulièrement prudent avecrm -rf ...
. Voirman rm
pour plus de détails.rm
commande pour terminer avant lamkdir
commande est exécutée; c'est la raison d'utiliser;
au lieu de&
. (Une commande précédente&
s'exécute de manière asynchrone en arrière-plan.)mkdir
exécuter larm
commande lorsque la commande réussit; c'est la raison d'utiliser;
au lieu de||
.mkdir
exécuter larm
commande lorsque la commande échoue (généralement, l'échec signifie que le répertoire n'existait pas déjà); c'est la raison d'utiliser;
au lieu de&&
.rm
commande peut échouer même lorsque le répertoire existait déjà, auquel cas lamkdir
commande échouera également, mais les messages d'erreur auront un sens et il n'est probablement pas nécessaire d'ajouter une étape intermédiaire pour vérifierfoo
l'existence avant d'essayer de le créer.Voir 3.2.3 Listes des commandes dans le Manuel de référence Bash pour plus d' informations et des explications sur les
;
,&
,||
et les&&
opérateurs.Comme Muru l'a suggéré (et Rinzwind a élaboré ), je vous recommande
rsync
de vérifier si cela répondra à vos besoins de sauvegarde. Il existe d'autres guides utiles sur la page de documentation rsync , ainsi que ce guide Ubuntu rsync .mkdir
crée des répertoires (le "mk" signifie "make" ). Il serait également mauvais de supprimer récursivement les répertoires et tous les fichiers qu'ils contiennent, car cela violerait le principe du moindre étonnement d'une manière qui entraînerait 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-r
option, ce qui est logique car ilrm
est censé supprimer des fichiers (c'est son objectif, donc le danger inhérent est intuitif et les utilisateurs savent généralement être prudents lorsqu'ils exécutent desrm
commandes).la source
Non, il n'y a pas de commande unique pour faire ce que vous demandez.
Pourquoi?
Dans ce cas, les commandes
mkdir
etrm
font ce dont vous avez besoin et fonctionnent bien ensemble, carrm -r
elles suppriment également le répertoire, de sorte qu'unemkdir
création ultérieure crée le répertoire.1 L'art de la programmation Unix , Eric S. Raymond, citant lui-même Doug McIlroy.
la source
La commande pour supprimer un répertoire est
rm
. Vous avez donc besoin de 2 commandes.Comme indiqué dans les commentaires, vous pouvez les enchaîner avec
;
(= faire les deux même si le 1er échoue) ou&&
(= seulement mkdir lorsque le rm n'échoue pas).C'est
-r
pour supprimer les répertoires. La 1ère commande supprime également TOUS les contenus du répertoire. Si ce n'est PAS votre intention, rm et mkdir ne sont pas ce que vous recherchez: les autorisations sontchmod
etchown
.Ambiguïté.
mkdir
signifie créer un répertoire. Pas supprimer et créer un répertoire. Et comme larm
commande sert à supprimer des éléments, il n'est pas nécessaire dermdir
pouvoir supprimer un répertoire.la source
Pour le faire de la manière la plus propre, j'utilise ceci:
Et pour l'utiliser:
Cela garantit que ce que vous essayez de supprimer est un répertoire et non un fichier:
-d
Vérifiez si un répertoire portant ce nom existe déjà. si oui, supprimez-le.-f
Vérifiez qu'aucun fichier portant ce nom n'existe. si c'est le cas, imprimez le message d'erreur et quittez.Créez le nouveau répertoire et la réussite de l'écho, ou en cas d'échec, l'écho a échoué.
la source