Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 tongue).

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

johnlege a écrit :

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 tongue

Hors ligne