#1 Le 10/12/2007, à 15:30
- crazycrow
Besoin de votre aide pour ecrire un batch
Bonjour,
Je voudrai ecrire un script qui permet de déplacer des fichier commançant par un nombre, vers un dossier commançant par le même nombre.
je penser faire un truc du genre :
ls -d 1001* | cp 1001_Fichier ???
Voila , je suis bloqué la , je n'arrive pas a dire que le 2eme argument est la sortie du pipe.
Je sait, in manque un "for", mais je devrais y arriver une fois une copie reussit.
Merci pour ceux qui m'aideront.
Hors ligne
#2 Le 10/12/2007, à 15:56
- Gari
Re : Besoin de votre aide pour ecrire un batch
écrit à la volée :
ls -d 1* | while read repertoire do cp ${repertoire}* ${repertoire}/ done
(je garantis rien, donc ).
Dernière modification par Gari (Le 10/12/2007, à 15:59)
Hors ligne
#3 Le 10/12/2007, à 15:58
- coca25
Re : Besoin de votre aide pour ecrire un batch
s'ils ont tous le même format de nom:
for fichier in *
do
rep=$(echo $fichier | grep -o '^[0-9]\+')
#rep devrait contenir les chiffres au début du nom du fichier
mv $fichier $rep
done
Dernière modification par coca25 (Le 10/12/2007, à 21:49)
Hors ligne
#4 Le 10/12/2007, à 15:59
- johnlege
Re : Besoin de votre aide pour ecrire un batch
Bonjour
tu peux faire
find . -name "1000*" -type f -exec mv "{}" "/tmp/1000" ";"
find --> rechercher
. --> dans le répertoire courant
-name --> des élements ayant pour nom
"1000*" --> 1000* (* étant le joker pour n'importe quoi derrière
-type f --> éléments qui sont des fichiers
-exec --> exécute la commande
mv "{}" --> déplace le fichier trouvé
"/tmp/1000" --> dans le répertoire /tmp/1000
";" --> fin de la commande mv
Attention il peut y avoir des erreurs si tu as des sous-répertoires contenant des fichiers nommés 1000
ou si ton répertoire de destination 1000 est au même niveau que tes fichiers
for i in `ls 1000*` --> liste de fichiers commençant par 1000
do
j=`echo $i|sed 's/^....\(.*\)/\1/'` ---> extraction des 4 premiers caractères représentant pour le dossier
mv $i $j --> déplacement du fichier vers le dossier
done
Merci d'indiquer résolu dans le titre quand c'est résolu
Hors ligne
#5 Le 10/12/2007, à 16:01
- johnlege
Re : Besoin de votre aide pour ecrire un batch
désolé
la boucle for, c'était pour te dire ou alors
Merci d'indiquer résolu dans le titre quand c'est résolu
Hors ligne
#6 Le 10/12/2007, à 19:20
- freebird
Re : Besoin de votre aide pour ecrire un batch
for i in `ls 1000*` --> liste de fichiers commençant par 1000
do
j=`echo $i|sed 's/^....\(.*\)/\1/'` --> extraction des 4 premiers caractères représentant pour le dossier
mv $i $j --> déplacement du fichier vers le dossier
done
En lieu et place de la commande sed on peut aussi utiliser un cut qui, à mon avis, est plus simple à appréhender.
for i in `ls 1000*` --> liste de fichiers commençant par 1000
do
j=`echo $i | cut -c1-4` --> extraction des 4 premiers caractères représentant pour le dossier
mv $i $j --> déplacement du fichier vers le dossier
done
Dernière modification par freebird (Le 10/12/2007, à 19:21)
Hors ligne
#7 Le 11/12/2007, à 11:34
- crazycrow
Re : Besoin de votre aide pour ecrire un batch
Ben merci pour toute vos reponse.
j'ai réussi a faire ce que je voulais.
Voila le scripte que j'ai utiliser :
#!/bin/bash
i=1
while [ $i -lt 2000 ] ;
do
rep=$(ls -d /media/sdb1/NDS/OK/$i\ *)
file=$(ls /media/sdb1/NDS/ZIP/$i\ *)
mv "$file" "$rep"
i=$[$i+1]
done
Encore merci pour votre aide
Hors ligne
#8 Le 11/12/2007, à 12:26
- coca25
Re : Besoin de votre aide pour ecrire un batch
tu n'as qu'un seul fichier/rep par numéro?
parce que sinon, ca ne fonctionne pas
Hors ligne