Renommer le contenu de fichiers en Applescript / Automator?

BS0D

Membre d’élite
Club MacG
27 Juillet 2008
2 322
530
searchreplaceapp.com
Bonjour à tous,

Voilà, j'ai un nombre important de fichiers html et php, dans lesquels je voudrais changer du contenu automatiquement car à la main ça prendrait trop de temps.

Ma question est la suivante: est-il possible de chercher/remplacer le contenu de ces fichiers avec automator ou en applescript ?
Si oui, avez-vous des indications?

(ex: remplacer tous les "BS0D" par "Mon Prénom" à l'intérieur même des fichiers)

Merci de votre aide... :)
 

pascalformac

Légende
Club MacG
23 Novembre 2003
58 699
1 814
un réglage avancé du freeware quicksilver peut faire ca

(fonction de depistage remplacement de contenu de fichier)
 

zacromatafalgar

Membre émérite
Si tu veux tester le code suivant, il fonctionne chez moi avec des fichiers html…

Il te suffit de remplacer les properties en début de script ;)
Bloc de code:
property textToFind : "test"
property textToWrite : "footer"

on open theDrop
	set nbrItems to count of theDrop
	repeat with thisFile from 1 to nbrItems
		set theFile to (item thisFile of theDrop)
		set fileID to open for access file (theFile as string)
		set dataFromFile to read fileID as string
		close access fileID
		
		
		set dataToWrite to findReplace(dataFromFile, textToFind, textToWrite)
		
		
		set x to open for access file (theFile as string) with write permission
		write dataToWrite to x
		close access x
	end repeat
end open


on findReplace(theData, toFind, replaceBy)
	set text item delimiters to toFind
	set theWords to {} & text items of theData
	set theResult to 1st item of theWords
	repeat with i from 2 to (length of theWords)
		set theResult to theResult & replaceBy & (item i of theWords)
	end repeat
	return theResult
end findReplace
 
  • J’aime
Réactions: BS0D

BS0D

Membre d’élite
Club MacG
27 Juillet 2008
2 322
530
searchreplaceapp.com
Si tu veux tester le code suivant, il fonctionne chez moi avec des fichiers html…

Il te suffit de remplacer les properties en début de script ;)
Bloc de code:
property textToFind : "test"
property textToWrite : "footer"

on open theDrop
    set nbrItems to count of theDrop
    repeat with thisFile from 1 to nbrItems
        set theFile to (item thisFile of theDrop)
        set fileID to open for access file (theFile as string)
        set dataFromFile to read fileID as string
        close access fileID
        
        
        set dataToWrite to findReplace(dataFromFile, textToFind, textToWrite)
        
        
        set x to open for access file (theFile as string) with write permission
        write dataToWrite to x
        close access x
    end repeat
end open


on findReplace(theData, toFind, replaceBy)
    set text item delimiters to toFind
    set theWords to {} & text items of theData
    set theResult to 1st item of theWords
    repeat with i from 2 to (length of theWords)
        set theResult to theResult & replaceBy & (item i of theWords)
    end repeat
    return theResult
end findReplace
Genial, je vais tester. par contre, ce sont des fichiers php que je dois retoucher... ça va marcher?

pas le temps de tester tout de suite, mais je te tiens au courant ;)
 

pascalformac

Légende
Club MacG
23 Novembre 2003
58 699
1 814
OK merci, je vais voir pour quicksilver (je connaissais pas) et si j'ai un souci je reviens par ici :)
ben non
tu vas dans le long fil dédié à ce freeware
( en passant tutos pdf dans les dernieres pages)

extrait
Lastly, here’s a cute trick from the Text Manipulation Actions plug-in we already talked about. If you bring up a text file in the object pane, even though there is no > next to it in the results list, you can still type → or / to move into the file, like you can with html files. What you get is a new results list with one text item for each line in the file. These all show an > next to them but you can’t → into them further. However you can choose from any of the normal text actions as well as a couple more that work on these text line reference objects. The ominously named Delete Line (UNSTABLE) will remove the line from the file. Yes, you’re cautioned about using it. Less risky is Change To... which takes new text in the third pane and will replace the text in the file with it. In addition, the Prepend Text... and Append Text... actions can work on text line references. Their argument is added as a new line before or after the line respectively. I had a problem with line-endings when using Prepend Text... on the first line in a file.
 

BS0D

Membre d’élite
Club MacG
27 Juillet 2008
2 322
530
searchreplaceapp.com
Je ne sais pas, je n'en ai pas pour tester.
Tu peux essayer sur une copie de fichier…
Je viens d'arriver au taffe, donc je retrouve un bon vieux windaube qui a déjà planté une fois au bout d'un quart d'heure :p mwah :)
Je testerai donc plus tard

ben non
tu vas dans le long fil dédié à ce freeware
( en passant tutos pdf dans les dernieres pages)
Merci, il me semble que je vais devoir l'appréhender un peu... du coup d'oeil que j'ai jeté, c'est pas si facile qu'automator.
On verra ce soir ;)

Merci les gars :up:
 

pascalformac

Légende
Club MacG
23 Novembre 2003
58 699
1 814
Merci, il me semble que je vais devoir l'appréhender un peu... du coup d'oeil que j'ai jeté, c'est pas si facile qu'automator.
le quicksilver est un outil très souple c'est ce qui en fait sa qualité et...son défaut
qualité: sert à plein de choses ( recherche , lancement d'appli , manips de fichiers , manips dans fichier) et le tout memorisé
defaut : manuel du developpeur minimaliste
mais plein de gens ont pondu des manuels ou screencasts
(ou decouvert des utilisations avancées, certaines imprévues par le developpeur ! c'est lui qui le dit , ravi)
 

BS0D

Membre d’élite
Club MacG
27 Juillet 2008
2 322
530
searchreplaceapp.com
Mouaip y'en a des tas des softs capables de faire ça, moi je passe par bbedit ou eclipse en général, sinon en 3 lignes de shell à coup de sed/ls/xargs
exact même textedit( dans certains cas c'est pas pratique du tout) ou textwrangler etc etc
Je me doute, mais moi je voudrais automatiser la tâche pour m'embeter le moins possible: à savoir que j'ai des dossiers et sous-dossiers, et 1000 fichiers ou un truc dans le genre.
L'intérêt c'est donc pas d'ouvrir chaque fichier individuellement pour me taper 100 clic de find&replace par fichier !
 

BS0D

Membre d’élite
Club MacG
27 Juillet 2008
2 322
530
searchreplaceapp.com
Si tu veux tester le code suivant, il fonctionne chez moi avec des fichiers html…

Il te suffit de remplacer les properties en début de script ;)
Bloc de code:
property textToFind : "test"
property textToWrite : "footer"

on open theDrop
    set nbrItems to count of theDrop
    repeat with thisFile from 1 to nbrItems
        set theFile to (item thisFile of theDrop)
        set fileID to open for access file (theFile as string)
        set dataFromFile to read fileID as string
        close access fileID
        
        
        set dataToWrite to findReplace(dataFromFile, textToFind, textToWrite)
        
        
        set x to open for access file (theFile as string) with write permission
        write dataToWrite to x
        close access x
    end repeat
end open


on findReplace(theData, toFind, replaceBy)
    set text item delimiters to toFind
    set theWords to {} & text items of theData
    set theResult to 1st item of theWords
    repeat with i from 2 to (length of theWords)
        set theResult to theResult & replaceBy & (item i of theWords)
    end repeat
    return theResult
end findReplace
re-
dis, y'a t-il moyen de coupler ce script avec une action automator style "ouvrir les éléments du finder indiqués"?
parce que ça marche, mais je suis obligé de dropper chaque fichier l'un après l'autre... c'est comme qui dirait pénible !


et avec QS, je trouve pas du tout comment faire...
 

zacromatafalgar

Membre émérite
re-
dis, y'a t-il moyen de coupler ce script avec une action automator style "ouvrir les éléments du finder indiqués"?
parce que ça marche, mais je suis obligé de dropper chaque fichier l'un après l'autre... c'est comme qui dirait pénible !
J'ai pourtant essayé avec plusieurs fichiers (4) et ça fonctionnait parfaitement, je viens de renouveler le test et ça marche chez moi…

Pour Automator, probablement mais je ne l'utilise pas.
 

BS0D

Membre d’élite
Club MacG
27 Juillet 2008
2 322
530
searchreplaceapp.com
J'ai pourtant essayé avec plusieurs fichiers (4) et ça fonctionnait parfaitement, je viens de renouveler le test et ça marche chez moi…

Pour Automator, probablement mais je ne l'utilise pas.
Alors peut etre que je m'y prends mal : j'ai essayé en l'enregistrant en tant qu'application option application executable uniquement et un peu toutes les autres options.
mais quand je rouvre mes fichiers, le texte à remplacer n'a disparu que dans un des fichiers droppés dessus (c'est bien un dropplet hein?!)

je sais pas si ça vient de ça, mais comme je les avais mis sur le net et que je les ai retéléchargés, mac os me demande confirmation avant de les ouvrir en me disant :

Voir la pièce jointe 19479

peut etre que ça empeche le dropplet d'ouvrir le fichier ?


EDIT :
je viens de trouver ce script sur le net (iScript.fr):

Bloc de code:
on open (liste_des_fichiers)
repeat with le_fichier_a_nettoyer in liste_des_fichiers
tell application "BBEdit"
activate
open le_fichier_a_nettoyer
replace "\t" using "" searching in text 1 of text window 1 options {search mode:literal, starting at top:true, wrap around:false, reverse:false, case sensitive:false, match words:false, extend selection:false}
replace return using "" searching in text 1 of text window 1 options {search mode:literal, starting at top:true, wrap around:false, reverse:false, case sensitive:false, match words:false, extend selection:false}
replace " " using "" searching in text 1 of text window 1 options {search mode:literal, starting at top:true, wrap around:false, reverse:false, case sensitive:false, match words:false, extend selection:false}
save text window 1
close text window 1
end tell
end repeat
end open
mais il marche pas du tout chez moi ... il me dit que la syntaxe n'est pas bonne :/
 

BS0D

Membre d’élite
Club MacG
27 Juillet 2008
2 322
530
searchreplaceapp.com
un simple grep -R sed -> newfile ferait l'affaire en une ligne de bash c'est regle ton histoire ;)
Pas tout compris là... peux tu détailler un peu ?

Je suis en train de galérer pour trouver des actions automator ou pour faire ça en applescript mais j'arrive à rien ... ça commence à me gaver ...
 

pascalformac

Légende
Club MacG
23 Novembre 2003
58 699
1 814
. ça commence à me gaver ...
ce gavage , quel timing et quelle abnegation, quel sens du sacrifice !
c'est toi le futur repas de fete dans ta famille?

détail , si c'est le cas , tu fais don de ton mac?Si oui tu previens et je m'arrange pour une couronne dédicacée à l'enterrement
"Au regretté blue screen of digestion" ca t'irait?

:D
 
  • J’aime
Réactions: BS0D

zacromatafalgar

Membre émérite
Alors peut etre que je m'y prends mal : j'ai essayé en l'enregistrant en tant qu'application option application executable uniquement et un peu toutes les autres options.
mais quand je rouvre mes fichiers, le texte à remplacer n'a disparu que dans un des fichiers droppés dessus (c'est bien un dropplet hein?!)
Enregistre au format Progiciel (universal) en ne cochant aucune case et particulièrement "Exécutable uniquement" car cette dernière t'empêche, si elle est cochée, d'accéder au code et donc de le visualiser/modifier en déposant le droplet sur l'icône de l'Éditeur de script…