Salut @ tous
Savez-vous comment renommer un ensemble de fichiers sous les noms 01.dat; 02.dat... etc en Linux.
Merci
-----
Salut @ tous
Savez-vous comment renommer un ensemble de fichiers sous les noms 01.dat; 02.dat... etc en Linux.
Merci
Il me repond : # manquant, abort...
(desole pour le spamage)
Euh... Tu utilises quel Linux ? et si tu le sais, quel shell (bash, sh, ...) ?
J'ai testé avec bash et sh, ça marche nickel...
J'y pense: ma commande ne fait que rajouter un '0' au début des fichiers: vu que tu m'as dit qu'ils s'appelaient 1.dat, etc... Il ne renomme pas n'importe quel fichier.
Quels sont les noms des fichiers que tu veux renommer ? Essaye de donner un maximum d'exemples, sinon on ne va jamais y arriver...
un petit script fait en 2-2 :
tu copies ca dans le fichier rename.sh ensuite un petit "chmod +x rename.sh" et un ./rename.sh <rep> <ext> pour lancer ton script.Code:#!/bin/bash i=1 for file in `ls $1/*.$2` do mv $file "$i.$2" i=`echo $i | sed -e "s/^0+//"` i=$((i+1)) if [ $i -le 9 ] then i="0$i" fi done
Exemple :
./rename /home/Towl/titi dat
Y a surement beaucoup plus propre, mais flemme de me creuser la tete à faire joli
Hum.. comme quoi faut toujours se relire et tester
i=`echo $i | sed -e "s/^0+//"` --> i=`echo $i | sed -e "s/^0*//"`
i=$((i+1)) --> i=$(($i+1))
Edit:
Et si tu veux pas des 0 avant :
Code:#!/bin/bash i=1 for file in `ls $1/*.$2` do mv $file "$i.$2" i=$(($i+1)) done
Spuer merci je vais essayer ca. Pour repondre a Faith, j'utilise Ubuntu, je ne sais pas comment s'appelle son shell mais c'est le terminal classique quoi...
En tout cas merci pour vos reponses !
C'est un bash par défaut.
Pour le script donné par Towl: Attention: je n'ai pas l'impression qu'il conservera tes fichiers dans l'ordre que tu souhaites (si j'ai bien compris ton problème) => c'est pour ça que je t'ai filé cette "rustine" un peu plus haut.
Pour repondre a ta question je suis stagiaire dans un centre de recherche mais je n'ai fait au'une petite annee de C++ version physique donc je ne connais helas pas grand chose en manipulation de fichiers et du shell.
Est-ce que tu saurais comment ecrire une partie du titre d'un fichier dans le fichier lui-meme ?
Par exemple, comment faire ecrire dans tototiti.dat titi en premiere ligne et toto en deuxieme ?
Merci
D'apres ce que j'ai compris l'ordre n'importait pas. La il est classes par ordre alphabétique (ordre classique du ls).Pour le script donné par Towl: Attention: je n'ai pas l'impression qu'il conservera tes fichiers dans l'ordre que tu souhaites (si j'ai bien compris ton problème) => c'est pour ça que je t'ai filé cette "rustine" un peu plus haut.
Est-ce que tu saurais comment ecrire une partie du titre d'un fichier dans le fichier lui-meme ?
Par exemple, comment faire ecrire dans tototiti.dat titi en premiere ligne et toto en deuxieme ?
Un petit code qui le fait (en partant du principe que le fichier contienne un séparateur (toto_titi.dat par exemple).
Il s'appelle sous la forme './monscript dat _' pour ajouter les deux lignes à tous les fichiers .dat avec comme séparateur _Code:#!/bin/bash ext=$1 separator=$2 for file in `ls *.$ext` do echo $separator $ext part1=`echo $file | cut -d "$separator" -f 1` part2=`echo $file | sed -r "s/^${part1}${separator}(.*)\.$ext/\1/"` echo $part1 $part2 echo -e "${part1}\n${part2}" > tmp cat $file >> tmp mv tmp $file done
Pareil, y a surement beaucoup plus propre.
Je te laisse etudier ces deux script pour que tu puisse voir un peu les commandes unix principale et ainsi te faire tes propres scripts
Quand j'avais posé la question sur les fichiers 1.dat, 2.dat, ... l'ordre avait l'air important.
Et le "risque" de ton script (qui est très bon, et que je réutiliserai probablement) est de placer le 10.dat avant le 1.dat et le 2.dat !
Si tu souhaite mettre le 2.dat avant le 10.dat en traitement pré script (en gros que le script conserve l'ordre numérique), tu peux le faire avec un peu d'awk et de sort :
ls -l $1/*.$2 | awk '{print $9}' | sort -n
A utiliser à la place du ls $1/*.$2
En gros : selection de la 9eme colonne (awk est mieux que cut pour les séparation en colone sur les caracteres blancs), et tri numérique