Bonjour,
J'essaie de faire une commande pour
modifier tous les fichiers "e;.txt"e; d'un repertoire afin de passer de l'UFT-8 au mac roman
Je sais faire une commande qui mets le résultat dans un nouveau fichier texte ( en terminant par " > nouveaufichier.txt" ) mais je voudrais que les fichiers modifiés gardent le meme nom
Donner un exemple de ce que tu as fais dans le genre "utiliser le même fichier en entrée et en sortie avec des redirections unix"
Il y a une confusion à la base : quand j'ai écrit
la redirection ">" sur le fichier source va écraser son contenu et le nom sera conservé.
je n'ai pas dit que la direction devait se faire dans la même ligne de commande, mais comme un résultat de celle-ci (réalisée de manière appropriée) le contenu du fichier original serait substitué ./ Ma question de béotien porte donc sur cette "manière appropriée" dans le Terminal : est-il possible qu'un script shell dans sa première ligne de commande remplisse une variable avec le résultat de iconv et que dans sa deuxième ligne la redirection de cette variable remplace le contenu du fichier original ? C'est comme cela que je procède dans mes scripts AppleScript quand je dois intervenir sur un fichier, et ça marche, je ne prétendais rien d'autre. Voici un exemple que je viens d'écrire à l'instant, qui va passer en capitales tout le contenu d'un fichier texte toto.txt sur le bureau. À exécuter dans l'Editeur de script set totoPath to (POSIX path of (path to desktop) as string) & "toto.txt" set myVar to do shell script "tr '[:lower:]' '[:upper:]' < " & totoPath do shell script "echo " & the quoted form of myVar & "> " & totoPath Ceci est-il transposable à la demande de l'OP, oui ou non ? si oui, ça s'écrirait comment, pour mon instruction, moi qui suis peu à l'aise avec le Terminal. -- J. B.
pehache <pehache.7@gmail.com> wrote:
Donner un exemple de ce que tu as fais dans le genre "utiliser le même
fichier en entrée et en sortie avec des redirections unix"
Il y a une confusion à la base : quand j'ai écrit
la redirection ">" sur le fichier source va écraser son contenu et le
nom sera conservé.
je n'ai pas dit que la direction devait se faire dans la même ligne de commande,
mais comme un résultat de celle-ci (réalisée de manière appropriée) le contenu
du fichier original serait substitué ./
Ma question de béotien porte donc sur cette "manière appropriée" dans le
Terminal :
est-il possible qu'un script shell dans sa première ligne de commande remplisse
une variable avec le résultat de iconv
et que dans sa deuxième ligne la redirection de cette variable remplace le
contenu du fichier original ?
C'est comme cela que je procède dans mes scripts AppleScript quand je dois
intervenir sur un fichier, et ça marche, je ne prétendais rien d'autre.
Voici un exemple que je viens d'écrire à l'instant, qui va passer en capitales
tout le contenu d'un fichier texte toto.txt sur le bureau.
À exécuter dans l'Editeur de script
set totoPath to (POSIX path of (path to desktop) as string) & "toto.txt"
set myVar to do shell script "tr '[:lower:]' '[:upper:]' < " & totoPath
do shell script "echo " & the quoted form of myVar & "> " & totoPath
Ceci est-il transposable à la demande de l'OP, oui ou non ?
si oui, ça s'écrirait comment, pour mon instruction, moi qui suis peu à l'aise
avec le Terminal.
--
J. B.
Donner un exemple de ce que tu as fais dans le genre "utiliser le même fichier en entrée et en sortie avec des redirections unix"
Il y a une confusion à la base : quand j'ai écrit
la redirection ">" sur le fichier source va écraser son contenu et le nom sera conservé.
je n'ai pas dit que la direction devait se faire dans la même ligne de commande, mais comme un résultat de celle-ci (réalisée de manière appropriée) le contenu du fichier original serait substitué ./ Ma question de béotien porte donc sur cette "manière appropriée" dans le Terminal : est-il possible qu'un script shell dans sa première ligne de commande remplisse une variable avec le résultat de iconv et que dans sa deuxième ligne la redirection de cette variable remplace le contenu du fichier original ? C'est comme cela que je procède dans mes scripts AppleScript quand je dois intervenir sur un fichier, et ça marche, je ne prétendais rien d'autre. Voici un exemple que je viens d'écrire à l'instant, qui va passer en capitales tout le contenu d'un fichier texte toto.txt sur le bureau. À exécuter dans l'Editeur de script set totoPath to (POSIX path of (path to desktop) as string) & "toto.txt" set myVar to do shell script "tr '[:lower:]' '[:upper:]' < " & totoPath do shell script "echo " & the quoted form of myVar & "> " & totoPath Ceci est-il transposable à la demande de l'OP, oui ou non ? si oui, ça s'écrirait comment, pour mon instruction, moi qui suis peu à l'aise avec le Terminal. -- J. B.
josephb
Matt wrote:
Les redirections fonctionnent dans les deux sens. Je te laisse le soin de savoir comment les utiliser ;)
Bon, ça je sais faire, voir un script dans une autre réponse, Message-ID: <1oq6x5l.9igxzr1798b7yN% Je suis bien plus à l'aise en passant par Applescript que de faire la même chose dans le Terminal… la confusion semble venir de ce que pehache croyait que je proposais de rediriger directement la réponse dans la même ligne de commande. -- J. B.
Matt <matt@lv426.eu.invalid> wrote:
Les redirections fonctionnent dans les deux sens. Je te laisse le soin
de savoir comment les utiliser ;)
Bon, ça je sais faire, voir un script dans une autre réponse,
Message-ID: <1oq6x5l.9igxzr1798b7yN%josephb@nowhere.invalid>
Je suis bien plus à l'aise en passant par Applescript que de faire la
même chose dans le Terminal…
la confusion semble venir de ce que pehache croyait que je proposais de
rediriger directement la réponse dans la même ligne de commande.
Les redirections fonctionnent dans les deux sens. Je te laisse le soin de savoir comment les utiliser ;)
Bon, ça je sais faire, voir un script dans une autre réponse, Message-ID: <1oq6x5l.9igxzr1798b7yN% Je suis bien plus à l'aise en passant par Applescript que de faire la même chose dans le Terminal… la confusion semble venir de ce que pehache croyait que je proposais de rediriger directement la réponse dans la même ligne de commande. -- J. B.
pehache
Le 10/05/2020 à 14:57, Joseph-B a écrit :
pehache wrote:
Donner un exemple de ce que tu as fais dans le genre "utiliser le même fichier en entrée et en sortie avec des redirections unix"
Il y a une confusion à la base : quand j'ai écrit
la redirection ">" sur le fichier source va écraser son contenu et le nom sera conservé.
je n'ai pas dit que la direction devait se faire dans la même ligne de commande, mais comme un résultat de celle-ci (réalisée de manière appropriée) le contenu du fichier original serait substitué ./
OK, mais si on a droit à plusieurs commandes la réponse au problème devient totalement triviale. Par exemple avec un fichier intermédiaire comme je l'ai déjà proposé : iconv [options] toto.txt > tmp.txt mv tmp.tx toto.txt Il y a probablement d'autres méthodes, mais celle-ci a l'avantage d'une simplicité absolue.
Ma question de béotien porte donc sur cette "manière appropriée" dans le Terminal : est-il possible qu'un script shell dans sa première ligne de commande remplisse une variable avec le résultat de iconv et que dans sa deuxième ligne la redirection de cette variable remplace le contenu du fichier original ?
On peut mettre un fichier complet dans une variable, mais on perd les retours à la ligne : myvar = $(<toto.txt) On peut avec une boucle lire le fichier ligne par ligne, et concaténer le résultat dans une variable et insérant à chaque fois un retour à la ligne (n) : myvar = "" while read -r ligne ; do myvar = "$myvar""$ligne"n done < toto.txt echo -e $myvar > toto.txt Ce n'est pas très élégant, les shells unix ne sont pas très adaptés à ce genre de gymnastique. Et ça revient toujours à passer explicitement par un object intermédiaire (un fichier temporaire, une variable en mémoire, etc...)
C'est comme cela que je procède dans mes scripts AppleScript quand je dois intervenir sur un fichier, et ça marche, je ne prétendais rien d'autre. Voici un exemple que je viens d'écrire à l'instant, qui va passer en capitales tout le contenu d'un fichier texte toto.txt sur le bureau. À exécuter dans l'Editeur de script set totoPath to (POSIX path of (path to desktop) as string) & "toto.txt" set myVar to do shell script "tr '[:lower:]' '[:upper:]' < " & totoPath do shell script "echo " & the quoted form of myVar & "> " & totoPath Ceci est-il transposable à la demande de l'OP, oui ou non ? si oui, ça s'écrirait comment, pour mon instruction, moi qui suis peu à l'aise avec le Terminal.
Pas testé, mais à priori quelque chose comme : myvar = "" while read -r ligne ; do myvar = "$myvar""$ligne"n done < toto.txt echo -e $myvar | tr '[:lower:]' '[:upper:]' > toto.txt Soit beaucoup moins simple que : tr '[:lower:]' '[:upper:]' < toto.txt > tmp.txt mv tmp.txt toto.txt -- - "...sois ouvert aux idées des autres pour peu qu'elles aillent dans le même sens que les tiennes." (ST sur fr.bio.medecine) - "Je suis ATARIste, et j'ai bien l'intention que l'on me respecte ici." (FLC sur fr.comp.sys.atari)
Le 10/05/2020 à 14:57, Joseph-B a écrit :
pehache <pehache.7@gmail.com> wrote:
Donner un exemple de ce que tu as fais dans le genre "utiliser le même
fichier en entrée et en sortie avec des redirections unix"
Il y a une confusion à la base : quand j'ai écrit
la redirection ">" sur le fichier source va écraser son contenu et le
nom sera conservé.
je n'ai pas dit que la direction devait se faire dans la même ligne de commande,
mais comme un résultat de celle-ci (réalisée de manière appropriée) le contenu
du fichier original serait substitué ./
OK, mais si on a droit à plusieurs commandes la réponse au problème
devient totalement triviale. Par exemple avec un fichier intermédiaire
comme je l'ai déjà proposé :
Il y a probablement d'autres méthodes, mais celle-ci a l'avantage d'une
simplicité absolue.
Ma question de béotien porte donc sur cette "manière appropriée" dans le
Terminal :
est-il possible qu'un script shell dans sa première ligne de commande remplisse
une variable avec le résultat de iconv
et que dans sa deuxième ligne la redirection de cette variable remplace le
contenu du fichier original ?
On peut mettre un fichier complet dans une variable, mais on perd les
retours à la ligne :
myvar = $(<toto.txt)
On peut avec une boucle lire le fichier ligne par ligne, et concaténer
le résultat dans une variable et insérant à chaque fois un retour à la
ligne (n) :
myvar = ""
while read -r ligne ; do
myvar = "$myvar""$ligne"n
done < toto.txt
echo -e $myvar > toto.txt
Ce n'est pas très élégant, les shells unix ne sont pas très adaptés à ce
genre de gymnastique. Et ça revient toujours à passer explicitement par
un object intermédiaire (un fichier temporaire, une variable en mémoire,
etc...)
C'est comme cela que je procède dans mes scripts AppleScript quand je dois
intervenir sur un fichier, et ça marche, je ne prétendais rien d'autre.
Voici un exemple que je viens d'écrire à l'instant, qui va passer en capitales
tout le contenu d'un fichier texte toto.txt sur le bureau.
À exécuter dans l'Editeur de script
set totoPath to (POSIX path of (path to desktop) as string) & "toto.txt"
set myVar to do shell script "tr '[:lower:]' '[:upper:]' < " & totoPath
do shell script "echo " & the quoted form of myVar & "> " & totoPath
Ceci est-il transposable à la demande de l'OP, oui ou non ?
si oui, ça s'écrirait comment, pour mon instruction, moi qui suis peu à l'aise
avec le Terminal.
Pas testé, mais à priori quelque chose comme :
myvar = ""
while read -r ligne ; do
myvar = "$myvar""$ligne"n
done < toto.txt
echo -e $myvar | tr '[:lower:]' '[:upper:]' > toto.txt
--
- "...sois ouvert aux idées des autres pour peu qu'elles aillent dans le
même sens que les tiennes." (ST sur fr.bio.medecine)
- "Je suis ATARIste, et j'ai bien l'intention que l'on me respecte ici."
(FLC sur fr.comp.sys.atari)
Donner un exemple de ce que tu as fais dans le genre "utiliser le même fichier en entrée et en sortie avec des redirections unix"
Il y a une confusion à la base : quand j'ai écrit
la redirection ">" sur le fichier source va écraser son contenu et le nom sera conservé.
je n'ai pas dit que la direction devait se faire dans la même ligne de commande, mais comme un résultat de celle-ci (réalisée de manière appropriée) le contenu du fichier original serait substitué ./
OK, mais si on a droit à plusieurs commandes la réponse au problème devient totalement triviale. Par exemple avec un fichier intermédiaire comme je l'ai déjà proposé : iconv [options] toto.txt > tmp.txt mv tmp.tx toto.txt Il y a probablement d'autres méthodes, mais celle-ci a l'avantage d'une simplicité absolue.
Ma question de béotien porte donc sur cette "manière appropriée" dans le Terminal : est-il possible qu'un script shell dans sa première ligne de commande remplisse une variable avec le résultat de iconv et que dans sa deuxième ligne la redirection de cette variable remplace le contenu du fichier original ?
On peut mettre un fichier complet dans une variable, mais on perd les retours à la ligne : myvar = $(<toto.txt) On peut avec une boucle lire le fichier ligne par ligne, et concaténer le résultat dans une variable et insérant à chaque fois un retour à la ligne (n) : myvar = "" while read -r ligne ; do myvar = "$myvar""$ligne"n done < toto.txt echo -e $myvar > toto.txt Ce n'est pas très élégant, les shells unix ne sont pas très adaptés à ce genre de gymnastique. Et ça revient toujours à passer explicitement par un object intermédiaire (un fichier temporaire, une variable en mémoire, etc...)
C'est comme cela que je procède dans mes scripts AppleScript quand je dois intervenir sur un fichier, et ça marche, je ne prétendais rien d'autre. Voici un exemple que je viens d'écrire à l'instant, qui va passer en capitales tout le contenu d'un fichier texte toto.txt sur le bureau. À exécuter dans l'Editeur de script set totoPath to (POSIX path of (path to desktop) as string) & "toto.txt" set myVar to do shell script "tr '[:lower:]' '[:upper:]' < " & totoPath do shell script "echo " & the quoted form of myVar & "> " & totoPath Ceci est-il transposable à la demande de l'OP, oui ou non ? si oui, ça s'écrirait comment, pour mon instruction, moi qui suis peu à l'aise avec le Terminal.
Pas testé, mais à priori quelque chose comme : myvar = "" while read -r ligne ; do myvar = "$myvar""$ligne"n done < toto.txt echo -e $myvar | tr '[:lower:]' '[:upper:]' > toto.txt Soit beaucoup moins simple que : tr '[:lower:]' '[:upper:]' < toto.txt > tmp.txt mv tmp.txt toto.txt -- - "...sois ouvert aux idées des autres pour peu qu'elles aillent dans le même sens que les tiennes." (ST sur fr.bio.medecine) - "Je suis ATARIste, et j'ai bien l'intention que l'on me respecte ici." (FLC sur fr.comp.sys.atari)
josephb
pehache wrote:
OK, mais si on a droit à plusieurs commandes la réponse au problème devient totalement triviale. Par exemple avec un fichier intermédiaire comme je l'ai déjà proposé : iconv [options] toto.txt > tmp.txt mv tmp.tx toto.txt Il y a probablement d'autres méthodes, mais celle-ci a l'avantage d'une simplicité absolue.
Tendre à la simplicité absolue n'est parfois pas trivial du tout ;-)
Ceci est-il transposable à la demande de l'OP, oui ou non ? si oui, ça s'écrirait comment, pour mon instruction, moi qui suis
peu à l'aise avec le Terminal.
Pas testé, mais à priori quelque chose comme : myvar = "" while read -r ligne ; do myvar = "$myvar""$ligne"n done < toto.txt echo -e $myvar | tr '[:lower:]' '[:upper:]' > toto.txt Soit beaucoup moins simple que : tr '[:lower:]' '[:upper:]' < toto.txt > tmp.txt mv tmp.txt toto.txt
Merci pour la réponse, je vais l'étudier de plus près. -- J. B.
pehache <pehache.7@gmail.com> wrote:
OK, mais si on a droit à plusieurs commandes la réponse au problème
devient totalement triviale. Par exemple avec un fichier intermédiaire
comme je l'ai déjà proposé :
OK, mais si on a droit à plusieurs commandes la réponse au problème devient totalement triviale. Par exemple avec un fichier intermédiaire comme je l'ai déjà proposé : iconv [options] toto.txt > tmp.txt mv tmp.tx toto.txt Il y a probablement d'autres méthodes, mais celle-ci a l'avantage d'une simplicité absolue.
Tendre à la simplicité absolue n'est parfois pas trivial du tout ;-)
Ceci est-il transposable à la demande de l'OP, oui ou non ? si oui, ça s'écrirait comment, pour mon instruction, moi qui suis
peu à l'aise avec le Terminal.
Pas testé, mais à priori quelque chose comme : myvar = "" while read -r ligne ; do myvar = "$myvar""$ligne"n done < toto.txt echo -e $myvar | tr '[:lower:]' '[:upper:]' > toto.txt Soit beaucoup moins simple que : tr '[:lower:]' '[:upper:]' < toto.txt > tmp.txt mv tmp.txt toto.txt
Merci pour la réponse, je vais l'étudier de plus près. -- J. B.