OVH Cloud OVH Cloud

rename

18 réponses
Avatar
DomiPi
Suis pas très fort dans l'utilisation de "find" ou "ls" ou ???
Qqun peut-il m'aider ?
Dans un KSH, je voudrais faire un "copy" comme dans les anciens DOS:
copy *.txt *.ini c-a-d copier tous les fichiers.txt en fichiers.ini
Merci à tous

Dominique

10 réponses

1 2
Avatar
Pascal Bourguignon
"DomiPi" writes:

Suis pas très fort dans l'utilisation de "find" ou "ls" ou ???
Qqun peut-il m'aider ?
Dans un KSH, je voudrais faire un "copy" comme dans les anciens DOS:
copy *.txt *.ini c-a-d copier tous les fichiers.txt en fichiers.ini
Merci à tous


mmv *.txt =1.ini

Mais si tu n'as pas mmv:

bash -c 'for f in *.txt ; do cp "$f" "${f/%.txt/.ini}" ; done'

Peut être que:

for f in *.txt ; do cp "$f" "${f/%.txt/.ini}" ; done

fonctionne directement dans ksh?

Sinon:

for f in *.txt ; do cp "$f" "`echo $f|sed -e 's/.txt$/.ini/'`" ; done


--
__Pascal_Bourguignon__ http://www.informatimago.com/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Living free in Alaska or in Siberia, a grizzli's life expectancy is 35 years,
but no more than 8 years in captivity. http://www.theadvocates.org/

Avatar
DomiPi
Merci Pascal
C'est vraiment de la réponse en real time !!!
Dominique

"Pascal Bourguignon" a écrit dans le
message de news:
"DomiPi" writes:

Suis pas très fort dans l'utilisation de "find" ou "ls" ou ???
Qqun peut-il m'aider ?
Dans un KSH, je voudrais faire un "copy" comme dans les anciens DOS:
copy *.txt *.ini c-a-d copier tous les fichiers.txt en fichiers.ini
Merci à tous


mmv *.txt =1.ini

Mais si tu n'as pas mmv:

bash -c 'for f in *.txt ; do cp "$f" "${f/%.txt/.ini}" ; done'

Peut être que:

for f in *.txt ; do cp "$f" "${f/%.txt/.ini}" ; done

fonctionne directement dans ksh?

Sinon:

for f in *.txt ; do cp "$f" "`echo $f|sed -e 's/.txt$/.ini/'`" ; done


--
__Pascal_Bourguignon__
http://www.informatimago.com/


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

~
Living free in Alaska or in Siberia, a grizzli's life expectancy is 35
years,

but no more than 8 years in captivity.
http://www.theadvocates.org/



Avatar
Laurent Wacrenier
Pascal Bourguignon écrit:

for f in *.txt ; do cp "$f" "`echo $f|sed -e 's/.txt$/.ini/'`" ; done


cp $f `basename $f .txt`.ini

Avatar
DomiPi
mmv et bash
ne sont pas implémentés dans mon OS par contre
for f in *.txt ; do cp "$f" "`echo $f|sed -e 's/.txt$/.ini/'`" ; done
fonctionne très bien
mais
for f in *.txt ; do cp "$f" "${f/%.txt/.ini}" ; done
me donne "bad substitution", pourtant ${....} est documenté mais je ne vois
pas le détail avec les slash pour une substitution.
Dommage cette commande me paraissait plus "propre" à moins que ...
Merci encore





"Pascal Bourguignon" a écrit dans le
message de news:
"DomiPi" writes:

Suis pas très fort dans l'utilisation de "find" ou "ls" ou ???
Qqun peut-il m'aider ?
Dans un KSH, je voudrais faire un "copy" comme dans les anciens DOS:
copy *.txt *.ini c-a-d copier tous les fichiers.txt en fichiers.ini
Merci à tous


mmv *.txt =1.ini

Mais si tu n'as pas mmv:

bash -c 'for f in *.txt ; do cp "$f" "${f/%.txt/.ini}" ; done'

Peut être que:

for f in *.txt ; do cp "$f" "${f/%.txt/.ini}" ; done

fonctionne directement dans ksh?

Sinon:

for f in *.txt ; do cp "$f" "`echo $f|sed -e 's/.txt$/.ini/'`" ; done


--
__Pascal_Bourguignon__
http://www.informatimago.com/


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

~
Living free in Alaska or in Siberia, a grizzli's life expectancy is 35
years,

but no more than 8 years in captivity.
http://www.theadvocates.org/



Avatar
DomiPi
Encore plus simple !!!! et ca fonctionne !!!!
Merci Laurent

"Laurent Wacrenier" <lwa@ teaser . fr> a écrit dans le message de
news:
Pascal Bourguignon écrit:

for f in *.txt ; do cp "$f" "`echo $f|sed -e 's/.txt$/.ini/'`" ;
done



cp $f `basename $f .txt`.ini



Avatar
Stephane Chazelas
2003-12-01, 11:35(+00), DomiPi:
mmv et bash
ne sont pas implémentés dans mon OS par contre
for f in *.txt ; do cp "$f" "`echo $f|sed -e 's/.txt$/.ini/'`" ; done
fonctionne très bien
[merci de citer à l'endroit et avec modération]


Sauf pour les noms de fichiers qui contiennent des TAB, des NL,
des successions de SPC, des backslashs, qui commencent par
"-" ou par ".", et ça ne prévient pas l'effacement de fichiers.

mais
for f in *.txt ; do cp "$f" "${f/%.txt/.ini}" ; done
me donne "bad substitution", pourtant ${....} est documenté mais je ne vois
pas le détail avec les slash pour une substitution.
Dommage cette commande me paraissait plus "propre" à moins que ...
[...]


${var/%.../...} est spécifique aux shells ksh93, bash et zsh.

Avec tout shell POSIX conformant, tu peux faire:

for f in ./*.txt ./.*.txt ./.txt; do
[ -e "$f" ] || continue
r=${f%.txt}.ini
mv -i "$f" "$r"
done

Ou:

find . ( -name . -o -prune ) -name '*.txt' -exec sh -c '
r=${1%.txt}.ini
mv -i "$1" "$r"' '{}' '{}' ;

--
Stéphane ["Stephane.Chazelas" arobase "free.fr"]

Avatar
Stephane Chazelas
2003-12-01, 11:51(+00), DomiPi:
<grrr, remis dans le bon ordre]
for f in *.txt ; do cp "$f" "`echo $f|sed -e 's/.txt$/.ini/'`" ;
done


cp $f `basename $f .txt`.ini
</grrr, remis dans le bon ordre>



Encore plus simple !!!! et ca fonctionne !!!!


Sauf si le nom du fichier contient des SPC, TAB, NL ou qu'il
commence par "." ou "-".

Ça ne prévient pas l'écrasement de fichiers.

Avec zsh4:

autoload -U zmv
zmv '(*).txt' '$1.ini'

et si on veut les dotfiles

zmv -Q '(*).txt(D)' '$1.ini'

--
Stéphane ["Stephane.Chazelas" arobase "free.fr"]



Avatar
Laurent Wacrenier
Stephane Chazelas écrit:
2003-12-01, 11:51(+00), DomiPi:
<grrr, remis dans le bon ordre]
for f in *.txt ; do cp "$f" "`echo $f|sed -e 's/.txt$/.ini/'`" ;
done


cp $f `basename $f .txt`.ini
</grrr, remis dans le bon ordre>



Encore plus simple !!!! et ca fonctionne !!!!


Sauf si le nom du fichier contient des SPC, TAB, NL ou qu'il
commence par "." ou "-".


C'était juste l'idée...
cp -- $f `basename -- $f .txt`.ini




Avatar
Stephane Chazelas
2003-12-1, 12:15(+00), Laurent Wacrenier:
[...]
Sauf si le nom du fichier contient des SPC, TAB, NL ou qu'il
commence par "." ou "-".


C'était juste l'idée...
cp -- $f `basename -- $f .txt`.ini


Toujours pareil pour les SPC, TAB, NL et "."

cp -- "$f" "`basename -- "$f" .txt`.ini"

et changer la boucle for si on veut inclure les dotfiles.

Et il reste toujours des problèmes pour les noms de fichiers
avec des "NL" avant le ".".

$ f='ceci est
un fichier
.txt'
$ touch "$f"

$ cp -- "$f" "`basename -- "$f" .txt`.ini"
$ ls | cat
ceci est
un fichier.ini
ceci est
un fichier
.txt

Problème qu'on ne rencontre pas avec:
cp -- "$f" "${f%.txt}.ini"

$ cp -- "$f" "${f%.txt}.ini"
$ ls | cat
ceci est
un fichier
.ini
ceci est
un fichier
.txt

--
Stéphane ["Stephane.Chazelas" arobase "free.fr"]


Avatar
Laurent Wacrenier
Stephane Chazelas écrit:
Et il reste toujours des problèmes pour les noms de fichiers
avec des "NL" avant le ".".


Quand on a des fichiers comme ça, la question est comment s'en
débarasser, pas comment changer le suffixe.

1 2