script bash
Le
Steve

Bonjour,
J'aurai bespoin de vos conseils.
J'aun un backup qui s'est mal déroulé et pas mal de mes fichiers, sont
devenus invisibles
En fait, un fichier nommé : toto.txt est devenu toto.txt~
ils ont l'air d'être tous correct si renommé, le fichier s'ouvre
correctememnt.
Y aurait il un script qui me permet de renommer tous les fichiers finissant
pas "~" et .. de supprimer ce "~" à la fin de mon fichier ?
Merci d'avance
J'aurai bespoin de vos conseils.
J'aun un backup qui s'est mal déroulé et pas mal de mes fichiers, sont
devenus invisibles
En fait, un fichier nommé : toto.txt est devenu toto.txt~
ils ont l'air d'être tous correct si renommé, le fichier s'ouvre
correctememnt.
Y aurait il un script qui me permet de renommer tous les fichiers finissant
pas "~" et .. de supprimer ce "~" à la fin de mon fichier ?
Merci d'avance
rename 's/~$//' *~
le 19/05/2013 à 07:12, Steve a écrit dans le message
Pour renommer tous les fichiers présents dans le dossier où tu te
trouves et ses sous-dossiers et dont le nom de fichier se termine par
'~' (si tes noms de fichiers ne comportent pas de retour à la ligne) :
find . -name '*~' | (IFS='n'; while read -r f; do mv "$f" "${f%*~}"; done)
Tu peux remplacer « do mv » par « do echo mv » dans un premier temps
afin de vérifier que ça correspond à ce que tu veux faire.
--
Benoit Izac
Boujour les gars;
Apparemment,
find . -name '*~' | (IFS='n'; while read -r f; do mv "$f" "${f%*~}"; done)
a bien marché...
rename 's/~$//' *~ ça n'a pas l'air d'avoir fonctionné.. et je ne sais
pas pourquoi :-(
Merci à tous les deux !!
C'est quand même moche comme commande.
Il y a plusieurs programmes "rename" qui traînent. "man rename" pour
voir quelles sont les options offertes par la version sur ton système.
N.
le 19/05/2013 à 22:05, Nicolas Richard a écrit dans le message
C'est toute la différence entre une commande "moche" mais standard et
une autre, aussi belle soit-elle, non standard.
À noter que les deux commandes ne sont pas strictement équivalentes ;
pour faire la même chose que « rename 's/~$//' *~ » ce serait plutôt :
for f in *~; do mv -- "$f" "${f%*~}"; done
Mais tant qu'à faire du non standard, je préfère zsh :
zmv '(*)~' '$1'
--
Benoit Izac
Steve a tapoté, le 19/05/2013 14:22:
Il faut se placer là où tes fichiers sont mais, il n'est pas récursif.
$ mkdir /tmp/test
$ touch /tmp/test1~ /tmp/test/test2~
$ ls /tmp/*~
/tmp/test~ /tmp/test1~
$ cd /tmp/
$ rename 's/~$//' *~ -nv # v pour verbose et n pour no act
test~ not renamed: test already exists
test1~ renamed as test1
--
Stéphane BOFH excuse #317:
Internet exceeded Luser level, please wait until a luser logs off before
attempting to log back on.
Tu te positionnes dans le répertoire de l'utilisateur (~)
find . -name "*~"-exec rm -rf {} ;
Il va trouver tous les fichiers se terminant pas ~ et les supprimer (et c'est récursif) ;)
Le posteur veut les *renommer* pas les supprimer !
--
Les simplifications c'est trop compliqué
for i in `find . -name "*~"` ; do mv $i `echo $i | sed -e 's/~$//'` ; done
le 21/05/2013 à 02:34, ST
% touch "a b~"
% for i in `find . -name "*~"` ; do mv $i `echo $i | sed -e 's/~$//'` ; done
mv: cannot stat ‘./a’: No such file or directory
mv: cannot stat ‘b~’: No such file or directory
--
Benoit Izac