Linux Tutoriels

Comment renommer en bloc des fichiers en noms de fichiers numériques sous Linux – –

Shutterstock / estherpoon

Vous voulez renommer tout un ensemble de fichiers en une séquence numérique (1.pdf, 2.pdf, 3.pdf,…) sous Linux? Cela peut être fait avec quelques scripts légers et cet article vous montrera comment faire exactement cela.

Noms de fichiers numériques

Habituellement, lorsque nous numérisons un fichier PDF à l’aide d’un matériel (téléphone portable, scanner PDF dédié), le nom du fichier se lit comme suit: 2020_11_28_13_43_00.pdf. De nombreux autres systèmes semi-automatisés produisent des noms de fichiers similaires basés sur la date et l’heure.

Parfois, le fichier peut également contenir le nom de l’application utilisée, ou d’autres informations comme par exemple le DPI applicable (points par pouce) ou le format de papier numérisé.

Lors de la collecte de fichiers PDF à partir de différentes sources, les conventions de dénomination des fichiers peuvent différer considérablement et il peut être bon de normaliser sur un nom de fichier numérique (ou numérique partiel).

Cela s’applique également à d’autres domaines et ensembles de fichiers. Par exemple, vos recettes ou votre collection de photos, des échantillons de données ont généré des systèmes de surveillance automatisés, des fichiers journaux prêts pour l’archivage, un ensemble de fichiers SQL pour l’ingénieur de base de données et généralement toutes les données collectées à partir de différentes sources avec différents schémas de dénomination.

  Aucune option «Exécuter avec le processeur graphique» dans le menu contextuel du clic droit

Renommer en bloc des fichiers en noms de fichiers numériques

Sous Linux, il est facile de renommer rapidement tout un ensemble de fichiers avec des noms de fichiers complètement différents, en une séquence numérique. «Facile» signifie «facile à exécuter» ici: le problème du renommage en masse des fichiers en nombres numériques est complexe à coder en soi: le script oneliner ci-dessous a pris 3-4 heures pour rechercher, créer et tester. De nombreuses autres commandes essayées avaient toutes des limitations que je voulais éviter.

Veuillez noter qu’aucune garantie n’est donnée ou fournie, et ce code est fourni «tel quel». Veuillez faire vos propres recherches avant de l’exécuter. Cela dit, je l’ai testé avec succès contre des fichiers avec divers caractères spéciaux, et aussi contre plus de 50k fichiers sans qu’aucun fichier ne soit perdu. J’ai également vérifié un fichier nommé 'a'$'n''a.pdf' qui contient une nouvelle ligne.

if [ ! -r _e -a ! -r _c ]; then echo 'pdf' > _e; echo 1 > _c ;find . -name "*.$(cat _e)" -print0 | xargs -0 -I{} bash -c 'mv -n "{}" $(cat _c).$(cat _e);echo $[ $(cat _c) + 1 ] > _c'; rm -f _e _c; fi

Voyons d’abord comment cela fonctionne, puis analysons la commande. Nous avons créé un répertoire avec huit fichiers, tous nommés différemment, sauf que leur extension correspond et est .pdf. Nous exécutons ensuite la commande ci-dessus:

  iMac, Mini et Pro: comparaison des Mac de bureau d'Apple

Renommer en bloc des fichiers en noms de fichiers numériques sous Linux

Le résultat a été que les 8 fichiers ont été renommés en 1.pdf, 2.pdf, 3.pdf, etc., même si leurs noms étaient assez décalés auparavant.

La commande suppose que vous n’avez aucun 1.pdf à x.pdf les fichiers nommés. Si vous le faites, vous pouvez déplacer ces fichiers dans un répertoire séparé, définissez le echo 1 à un nombre plus élevé pour commencer à renommer les fichiers restants à un décalage donné, puis fusionner à nouveau les deux répertoires.

Veillez toujours à ne pas écraser les fichiers, et c’est toujours une bonne idée de faire une sauvegarde rapide avant de mettre à jour quoi que ce soit.

Regardons la commande en détail. Cela peut aider à voir ce qui se passe en ajoutant le -t option pour xargs ce qui nous permet de voir ce qui se passe dans les coulisses:

xargs avec l'option -t nous permet de voir ce qui se passe pendant le processus de changement de nom

Pour commencer, la commande utilise deux petits fichiers temporaires (nommés _e et _c) comme stockage temporaire. Au début du oneliner, il fait un contrôle de sécurité en utilisant un if déclaration pour garantir que les deux _e et _c les fichiers ne sont pas présents. S’il existe un fichier portant ce nom, le script ne se poursuivra pas.

En ce qui concerne l’utilisation de petits fichiers temporaires par rapport aux variables, je peux dire qu’alors que l’utilisation de variables aurait été idéale (économise des E / S de disque), il y avait deux problèmes que je rencontrais.

  Comment personnaliser le terminal KDE

Le premier est que si vous EXPORTEZ une variable au début du oneliner et que vous utilisez ensuite cette même variable plus tard, si un autre script utilise la même variable (y compris ce script s’exécute plus d’une fois simultanément sur la même machine), alors ce script, ou celui-ci, peut être affecté. Il vaut mieux éviter de telles interférences lorsqu’il s’agit de renommer de nombreux fichiers!

Le second était que xargs en combinaison avec bash -c semble avoir une limitation dans la gestion des variables dans le bash -c ligne de commande. Même des recherches approfondies en ligne n’ont pas fourni de solution viable pour cela. Ainsi, j’ai fini par utiliser un petit fichier _c qui continuent de progresser.

_e Est l’extension que nous rechercherons et utiliserons, et _c est un compteur qui sera automatiquement augmenté à chaque changement de nom. Le echo $[ $(cat _c) + 1 ] > _c le code s’en charge, en affichant le fichier avec cat, en ajoutant un numéro et en le réécrivant.

La commande utilise également la meilleure méthode possible pour gérer les caractères spéciaux de nom de fichier en utilisant une terminaison nulle au lieu de la terminaison de nouvelle ligne standard, c’est-à-dire la