J'ai un simple AppleScript qui appelle un shell perl script pour remplacer une chaîne par une autre chaîne (ici une avec deux) dans des fichiers avec des extensions de fichiers spécifiées (ici .txt et .xyz).
Il fonctionnait exactement comme je l'ai indiqué ci-dessous, mais ce n'est plus le cas. (probablement depuis la mise à jour vers Mojave l'année dernière) .
set CleanFiles to "
s/one/two/g;
"
set myFolder to choose folder with prompt "Choose a folder with files to be cleaned up:"
set theFolder to POSIX path of myFolder
do shell script "find " & theFolder & " \\( -name \\*.txt -o -name \\*.xyz \\) -print0 | xargs -0 perl -i -pe '" & CleanFiles & "'"
Il n'y a pas de message d'erreur, il semble s'exécuter mais ne fait rien.
Qu'est-ce qui pourrait ne pas aller ?
0 votes
Eh bien, le plus évident : vous nommez la variable
CleanFiles
dans la première ligne, mais utilisezCleanElanFiles
dans la dernière ligne. Est-ce là le problème, ou simplement une erreur de transcription ?0 votes
@TedWrigley ooops, sorry no that was a typo - la chose réelle est beaucoup plus complexe mais je l'ai réduite à un exemple minimal ici.
0 votes
Ah. Ok, alors je pense que votre problème est que vous devez citer la ligne du chemin d'accès au dossier. Changez la ligne 3 comme suit
set theFolder to quoted form of (POSIX path of myFolder)
. Lorsque je fais cela sur mon dossier de test, votre script semble fonctionner.0 votes
@TedWrigley Awesome, yes !! C'est ça. Merci beaucoup ! Je suppose que je n'arrive jamais à savoir quand utiliser la forme citée et quand ne pas le faire... :P Quoi qu'il en soit, si vous transformez votre commentaire en réponse, je le cocherai.
1 votes
Utilisez le
quoted form of
lorsque vous pensez qu'il y a une chance qu'un espace blanc puisse se faufiler dans une variable. Rappelez-vous simplement qu'Unix utilise l'espace comme délimiteur, et que si un espace non cité est inséré, ce qui devrait être un argument sera transformé en deux, et toute la liste des arguments sera annulée. Je vais ajouter une réponse...