Voulez-vous renommer un ensemble complet de fichiers en une séquence de nombres (1.pdf, 2.pdf, 3.pdf,…) fr Linux? Cela peut être fait avec des scripts légers et cet article vous montrera comment faire exactement cela.
Noms de fichiers numériques
En général, lorsque nous scannons un fichier PDF avec du matériel (téléphone portable, scanner PDF dédié), le nom du fichier lira quelque chose comme 2020_11_28_13_43_00.pdf. De nombreux autres systèmes semi-automatiques 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 qui est utilisée, ou d'autres informations comme, par exemple, le DPI (points par pouce) format de papier applicable ou numérisé.
Lors de la collecte de fichiers PDF à partir de différentes sources, les conventions de nommage des fichiers peuvent différer considérablement et il peut être bon de standardiser sur un nom de fichier numérique (ou numérique en partie).
Ceci s'applique également à d'autres domaines et ensembles de fichiers. Par exemple, vos recettes ou collection de photos, échantillons de données générés dans des systèmes de surveillance automatisés, fichiers journaux prêts à être archivés, un ensemble de fichiers SQL pour l'ingénieur de base de données et, en général, toutes les données collectées à partir de différentes sources avec différents schémas de nommage.
Renommer les fichiers en vrac en noms de fichiers numériques
En Linux, il est facile de renommer rapidement tout un ensemble de fichiers avec des noms de fichiers totalement différents, à une suite de nombres. "Facile" signifie "facile à exécuter" ici: le problème de renommer les fichiers en nombres numériques est complexe à encoder lui-même: le script en ligne ci-dessous est tiré de 3 une 4 heures pour enquêter, créer et tester. De nombreuses autres commandes testées, ils avaient tous des limitations que je voulais éviter.
Veuillez noter qu'aucune garantie n'est faite ou fournie, et ce code est fourni “mais qu'en est-il des produits moins”. Faites vos propres recherches avant de courir. Cela dit, Je l'ai testé avec succès contre des fichiers avec pas mal de caractères spéciaux, et aussi contre plus de 50k fichiers sans perdre aucun fichier. J'ai aussi vérifié un fichier appelé 'a'$'n''a.pdf'
contenant une nouvelle ligne.
si [ ! -r _e -a ! -r_c ]; puis echo 'pdf' > _e; écho 1 > _c ;trouve . -Nom "*.$(chat _e)" -imprimer0 | xargs -0 -je{} bash -c 'mv -n "{}" $(chat _c).$(chat _e);écho $[ $(chat _c) + 1 ] > _c'; rm -f _e _c; être
Voyons d'abord comment cela fonctionne et plus tard analysons la commande. Nous avons créé un répertoire avec huit fichiers, tous avec des noms très différents, sauf que son extension correspond et est .pdf. Ensuite, nous exécutons la commande précédente:
Le résultat fut que 8 les fichiers ont été renommés en 1.pdf, 2.pdf, 3.pdf, etc., même si leurs noms étaient assez déplacés avant.
La commande suppose que vous n'avez aucun 1.pdf pour x.pdf fichiers encore nommés. S'il le fait, vous pouvez déplacer ces fichiers dans un répertoire séparé, met le echo 1
à un nombre plus élevé pour commencer à renommer les fichiers restants à un décalage donné, et plus tard fusionner à nouveau les deux répertoires.
Veillez toujours à ne pas écraser de fichiers, et c'est toujours une bonne idée de faire une sauvegarde rapide avant de mettre à jour quoi que ce soit.
Voyons la commande en détail. Vous pouvez aider à voir ce qui se passe en ajoutant le -t
option une xargs
qui nous permet de voir ce qui se passe dans les coulisses:
Pour commencer, la commande utilise deux petits fichiers temporaires (appelé _moi et _C) comme stockage temporaire. Au début de l'eye-liner, faire un vérification de sécurité utilisant un if
déclaration pour s'assurer que les deux _moi et _C les fichiers ne sont pas présents. S'il y a un fichier avec ce nom, le script ne continuera pas.
Sur le thème de l'utilisation de petits fichiers temporaires par rapport aux variables, je peux dire que, bien que l'utilisation de variables aurait été idéale (économiser quelques E / Disque S), il y avait deux problèmes que je rencontrais.
La première est que si vous EXPORTEZ une variable au début de la doublure et utilisez ensuite cette même variable plus tard, si un autre script utilise la même variable (y compris ce script qui s'exécute plusieurs fois simultanément sur la même machine), donc ce script, Ouest, peut être affecté. Il est préférable d'éviter de telles interférences lorsque vous essayez de renommer de nombreux fichiers !!
La seconde é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 en ligne approfondies n'ont pas fourni de solution viable pour cela.. Pour cela, j'ai fini par utiliser un petit fichier _C qui gardent le progrès.
_moi C'est l'extension que nous allons rechercher et utiliser, et _C est un compteur qui augmentera automatiquement à chaque changement de nom. Les echo $[ $(cat _c) + 1 ] > _c
le code s'en occupe, montrant le fichier avec cat
, ajouter un nombre et le réécrire.
La commande utilise également la meilleure méthode possible pour gérer les caractères de nom de fichier spéciaux en utilisant une terminaison nulle au lieu de la terminaison de nouvelle ligne standard, En d'autres termes, la