2010-12-08 74 views
0

J'ai une application (Templify) qui crée une structure de répertoire sans canevas, mais il semble ne pas être en mesure de renommer le « _ _ NOM _ _ » avec ce que j'ai identifié comme la cible.renommer les fichiers et répertoires {searchstr} avec {ReplaceStr}

C'est très bien si je peux trouver un moyen propre de renommer tous les fichiers & répertoires avec mon texte de remplacement. J'ai trouvé une méthode rename.pl qui renomme les fichiers, et j'ai trouvé du code qui supprime les underscores dans les noms de fichiers et les remplace par des espaces ... mais quand je modifie le code pour mettre dans mes termes de recherche, il ne semble jamais travailler.

Donc, fondamentalement, je dois remplacer "_ _ NAME__" avec quelque chose comme "Project-Name".

Je suis heureux de modifier les chaînes de recherche pour chaque réutilisation future, mais j'aimerais trouver comment créer un fichier auquel je peux passer ARGS.

Je suis sur XP et peut utiliser Cygwin (Cygwin ne semble pas avoir « Rename » ce qui le rend difficile de trouver des solutions de type linux avec l'aide de la fonction appelée « renommer » ....)

J'ai trouvé this qui est facile à utiliser pour les fichiers dans le répertoire courant, mais je ne sais pas assez pour lui dire de recurse dans les sous-répertoires.

Toute aide serait géniale.

Merci, Scott

+0

Quand vous dites "il ne semble jamais travailler", je serais ravi de voir la code que vous avez essayé. Avez-vous eu une erreur? Ou était-ce juste que rien ne s'est passé? Pouvez-vous partager une liste de répertoires avant-après? – Narveson

+0

Je voulais juste dire que l'application que j'utilisais me demandait un nom de projet, et la valeur que j'avais saisie n'était jamais utilisée dans les répertoires nouvellement créés. J'ai supposé que les répertoires et les fichiers avec "__NAME__" étaient censés être remplacés par ce que j'avais entré comme nom de projet. – Scott

Répondre

0

De Cygwin:

find /cygdrive/c/mytree -type f | perl -ne 'rename $_, $1/Project-Name if m[^(.*)/__NAME__$]' 

Ou en utilisant python:

import os 

for root, dirs, files in os.walk("C:\\mytree"): 
    for filename in files: 
     if filename == "__NAME__": 
      os.rename(os.path.join(root, filename), os.path.join(root, "Project-Name")) 
+0

merci, mais j'ai eu une erreur sur la version de cygwin: manquant virgule après le premier argument pour renommer la fonction à -e ligne 1, près de "Nom si". Où dois-je placer cette virgule? THX. – Scott

+0

Fixé. Je pense. – itsadok

+0

Mieux ajouter des guillemets: 'renommer $ _," $ 1/Nom du projet "' – reinierpost