Maintenant, avant de faire face à la paume et cliquez sur l'entrée en double ou similaire, lisez la suite, cette question est à la fois théorique et pratique. Du titre, il est assez évident que j'essaie de faire, de trouver des fichiers, puis de les renommer. Eh bien le problème, il y a tellement de façons de le faire, que j'ai finalement décidé d'en choisir un, et d'essayer de le comprendre, théoriquement.en utilisant find et rename pour leur utilisation
Permettez-moi de la scène: Disons que j'ai 100 fichiers tous nommés comme celui-ci Image_200x200_nnn_AlphaChars.jpg, où le nnn est un nombre supplémentaire et AlphaChars-à-dire:
Image_200x200_001_BlueHat.jpg
Image_200x200_002_RedHat.jpg
...
Image_200x200_100_MyCat.jpg
Entrez l'étape trouver. Maintenant, avec un simple doublure je peux trouver tous les fichiers d'image dans ce répertoire. (Je ne sais pas comment faire insensible à la casse)
find . -type f -name "*.jpg"
Entrez le stade renommer. Sur son propre, Rename vous attendent à effectuer les opérations suivantes:
rename <search> <replace> <haystack>
Lorsque je tente de combiner les deux avec -print0 et xargs et quelques expressions régulières je coincé, et je suis presque sûr que c'est parce que renommer recherche la botte de foin ou de la partie de recherche ... (S'il vous plaît n'expliquer si vous comprenez ce qui se passe après la conduite)
find . -type f -name "*.jpg" -print0 | xargs -0 rename "s/Image_200x200_(\d{3})/img/"
donc, le but est d'obtenir la découverte de donner renommer le nom original d'image , et remplacer Oui, je sais que les doublons poseront un problème, et oui, je sais que les espaces dans le nom vont aussi faire de ma vie un enfer, et ne commencent même pas avec les sous-répertoires et les sous-répertoires. le semblable. Pour rester simple, nous parlons d'un seul répertoire, et tous les noms de fichiers sont uniques et sans caractères spéciaux.
J'ai besoin de comprendre les bases fondamentales, avant de passer aux choses hardcore. Quelqu'un a-t-il envie d'aider?
Pour l'insensibilité à la casse, faites '-iname' à la place de' -name'. – AlG
Si vous connaissez vos fichiers sont dans un seul répertoire, fossé 'find'. 'find' est parfait lorsque vos fichiers cible sont dispersés dans une hiérarchie de répertoires, mais dans un seul répertoire, vous trouverez [pattern glob ou extended-glob] (http://www.gnu.org/software/bash/manual/ bashref.html # Pattern-Matching) fera l'affaire. Ensuite, vous avez: 'renommer 's/Image_200x200 _ (\ d {3})/img /" * .jpg' –
J'aime simplifier, merci @ glenn-jackman, mais ce changement de nom est évidemment de plus en plus compliqué, donc J'utilise find, comme la prochaine étape serait de le faire, de trouver et de remplacer récursivement des fichiers et de les renommer, et plus tard, avec des espaces dans les noms ou les caractères spéciaux ... mais simples basic sont importants pour commencer:) –