Je veux créer un répertoire avec un numéro à la fin, ex "dir1", et incrémenter ce numéro si le répertoire existe déjà jusqu'à ce qu'il atteigne un nom de répertoire qui n'existe pas, et je dois le faire sur une seule ligne dans une ligne de commande Linux, quelque chose comme:
mkdir --increment dir$
Comment pourrais-je procéder?
Jusqu'à présent, j'ai ceci:
dir=output; n=0; mkdir -p $dir$n; if test -d $dir$n; then n=$((n+1)); echo $dir$n; fi
Mais il fait juste écho au nom du répertoire suivant, j'en ai besoin pour exécuter récursivement la commande.
la source
Si vous souhaitez simplement créer de manière incrémentielle des répertoires répertoriés dans le bon ordre, puis-je plutôt recommander des dossiers nommés en fonction de la date actuelle?
Il créera des répertoires avec les noms comme
dir-2014-03-02
(YYYY-MM-DD
, de manière à apparaître dans l'ordre alphabétique).Si vous créez plusieurs répertoires par jour, vous pouvez ajouter l'heure actuelle au nom de fichier. Découvrez
man date
comment modifier le formatage de sortie dedate
.la source
recherchez d'abord le "plus grand" dirname, obtenez le nombre et l'incrémentation qui:
la source
printf
ici? Ce ne sera pas unecho
travail simple ?dir[0-9]*
au lieu dedir*
.En supposant que vos répertoires commencent toujours par "dir1" et qu'il n'y a pas de fichiers nommés $ dir * (c'est-à-dire qu'ils sont tous des répertoires numérotés séquentiellement), vous pouvez vous en tirer avec cette seule ligne -
Cela compte le nombre de fichiers commençant par $ dir, puis en ajoute un à ce nombre et crée un nouveau fichier.
la source
Addendum aux autres réponses: Si vous avez besoin des répertoires pour trier correctement par nom, vous pouvez également ajouter un nouveau numéro de répertoire (NUM) avec des zéros à une longueur fixe.
Les éléments suivants peuvent être condensés sur une ligne ou intégrés dans l'une des autres solutions.
Cela suppose que NUM commence par au moins 1 chiffre et ne dépassera pas la longueur fixe. Adaptez-vous en conséquence à vos besoins.
la source