GNU/Linux >> Tutoriels Linux >  >> Linux

Script shell Linux pour ajouter des zéros non significatifs aux noms de fichiers

Utilisation du rename (prename dans certains cas) script qui est parfois installé avec Perl, vous pouvez utiliser des expressions Perl pour renommer. Le script ignore le changement de nom en cas de collision de noms.

La commande ci-dessous renomme uniquement les fichiers qui ont quatre chiffres ou moins suivis d'une extension ".txt". Il ne renomme pas les fichiers qui ne sont pas strictement conformes à ce modèle. Il ne tronque pas les noms composés de plus de quatre chiffres.

rename 'unless (/0+[0-9]{4}.txt/) {s/^([0-9]{1,3}\.txt)$/000$1/g;s/0*([0-9]{4}\..*)/$1/}' *

Quelques exemples :

Original    Becomes
1.txt       0001.txt
02.txt      0002.txt
123.txt     0123.txt
00000.txt   00000.txt
1.23.txt    1.23.txt

D'autres réponses données jusqu'à présent tenteront de renommer les fichiers qui ne sont pas conformes au modèle, produiront des erreurs pour les noms de fichiers contenant des caractères non numériques, effectueront des renommages qui produisent des collisions de noms, essaieront et échoueront de renommer les fichiers qui ont des espaces dans leurs noms et peut-être d'autres problèmes.


Une ligne :

ls | awk '/^([0-9]+)\.txt$/ { printf("%s %04d.txt\n", $0, $1) }' | xargs -n2 mv

Comment puis-je utiliser grep pour faire correspondre uniquement les lignes qui contiennent \d.txt (IE 1 chiffre, puis un point, puis les lettres txt) ?

grep -E '^[0-9]\.txt$'

Essayez :

for a in [0-9]*.txt; do
    mv $a `printf %04d.%s ${a%.*} ${a##*.}`
done

Changer le modèle de nom de fichier ([0-9]*.txt ) si nécessaire.

Un changement de nom énuméré à usage général qui ne fait aucune hypothèse sur l'ensemble initial de noms de fichiers :

X=1;
for i in *.txt; do
  mv $i $(printf %04d.%s ${X%.*} ${i##*.})
  let X="$X+1"
done

Sur le même sujet :

  • Script bash pour remplir les noms de fichiers
  • Extraire le nom et l'extension du fichier dans bash

for a in *.txt; do
  b=$(printf %04d.txt ${a%.txt})
  if [ $a != $b ]; then
    mv $a $b
  fi
done

Linux
  1. Insérer plusieurs lignes de données dans un fichier après les correspondances de modèle à l'aide du script shell Linux

  2. Comment créer un fichier temporaire en script shell ?

  3. Linux - Remplacement des espaces dans les noms de fichiers

  4. Comment changer un mot dans un fichier avec un script shell Linux

  5. impossible d'exécuter un fichier binaire lors de la tentative d'exécution d'un script shell sous Linux

Comment renommer un ou plusieurs fichiers sous Linux

Comment exécuter un script Shell en tant que service Systemd sous Linux

Imprimer le temps d'exécution du script Shell sous Linux

Qu'est-ce que Shebang dans Linux Shell Scripting ?

Comment ajouter des utilisateurs à Linux via un script shell

Créer des modèles avec Linux dans un script Shell ?