[LINUX] Script shell qui numérote les noms en double lors de la création de fichiers

Présentation du script

--Créez un fichier vide avec le nom de fichier spécifié par l'argument --Si un fichier du même nom existe déjà, numérotez-le et créez-le. --Si un fichier numéroté existe également, créez-le avec un numéro un supérieur à ce nombre.

#!/bin/bash

file=$1

if [[ -e ${file} ]]; then
	maxnumber=$(find . -mindepth 1 -maxdepth 1 -printf "%f\n" \
   | grep -e "^${file}\$" -e "^${file}_[0-9][0-9]*\$" \
	| sed "s/^${file}_\\{0,1\\}//" \
	| sed 's/^$/0/' \
	| sort -rn \
	| head -n 1 ) ;

	file+="_$((maxnumber+1))"
fi
	touch $file

Commentaire

#Rechercher le répertoire actuel(.)Rechercher dans la liste des fichiers
  find . -mindepth 1 -maxdepth 1 -printf "%f\n" 

  # -avec mindepth 1-Limiter la hiérarchie recherchée par maxdepth 1 au courant uniquement
  # -Printf imprime uniquement le nom du fichier à l'exclusion du nom du répertoire(%f)Séparez par un saut de ligne (\n)
 #Rechercher des fichiers non numérotés et numérotés avec grep
   grep -e "^${file}\$" -e "^${file}_[0-9][0-9]*\$" 
   # -Utiliser une expression régulière comme option e
 #"nom de fichier_"Nom de fichier" dans "Numéro"_Seul le nombre est sorti sauf
   sed "s/^${file}_\\{0,1\\}//"
   # {0,1}Représente 0 à 1 répétition ou moins du caractère précédent,_Match avec ou sans
   #ce temps{}Échapper(\)Est nécessaire.\Parce qu'il a besoin d'être échappé\\Devient
#Les fichiers non numérotés seront des lignes vides, alors remplacez-les par 0
  sed 's/^$/0/' 
  # ^Les caractères qui suivent correspondent au début de la ligne,$Indique que la chaîne précédente correspond à la fin de la ligne
  #  ^$Pointe vers une ligne vide car rien n'est écrit entre
#Trier par ordre décroissant des nombres
  sort -rn
  #  -r Option pour trier dans l'ordre inverse
  #  -n Options pour considérer les chaînes comme des nombres
#Sortir uniquement le plus grand nombre
  head -n 1 
  # -n 1 Sortie uniquement de la première ligne

Avec les commandes jusqu'à présent, j'ai pu obtenir le plus grand nombre de noms de fichiers en double. En insérant ces commandes dans le remplacement de commande $ (), le résultat de l'exécution est affecté à la variable maxnumber.

À partir de là, créez un nouveau numéro et créez un fichier.

#Dans le nom du fichier "_Donnez "numéro"
  file+="_$((maxnumber+1))"
  #Ajoutez 1 à maxnumber et ajoutez 1 au nom du fichier_Ajouter un numéro"
#Création de fichier
  touch ${file}

Si le nom du fichier n'est pas dupliqué, il sera créé tel quel sans numéro.

Recommended Posts

Script shell qui numérote les noms en double lors de la création de fichiers
Créer un script shell pour écrire un journal
Script Shell pour mettre Webmin dans Alpine Linux
Que contient cette variable (lorsque le script Python est en cours d'exécution)
Création d'un script Python prenant en charge l'API e-Stat (ver.2)
Un script shell qui envoie simplement le résultat de l'exécution SQL
Essayons un script shell
Traitez les fichiers du dossier dans l'ordre avec le script shell
Un ensemble de fichiers de script qui font wordcloud avec Python3
Un script python qui supprime les fichiers ._DS_Store et ._ * créés sur Mac
Script pour télécharger les fichiers journaux AWS RDS à grande vitesse
Précautions lors de la création d'un générateur Python
Lors de la création d'une matrice dans une liste
[Stada] Un script qui vous appellera à la sortie de Pokemon GO
[Ubuntu] Comment exécuter un script shell
Gérez les générations de rotation des journaux avec un script shell.
Script qui analyse morphologiquement l'URL spécifiée
Script pour convertir entre le fichier de langue Django (PO) et le texte délimité par des tabulations (TSV)
Précautions lors de la création d'une vue qui réduit les enregistrements par date et heure