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 17/12/2009, à 11:25

freddybidouille

[BASH] Stocker noms de dossier et fichiers dans des variables

hello,

J'aurais besoin d'un coup de main en BASH pour stocker le noms de mes sous-dossiers (et plus tard des fichiers contenus dans ces sous-dossiers) dans des variables en fonction du $i de la boucle for.

Ce que je veux faire en détail :
J'ai 4 dossiers personnels contenant en vrac des "fichier.doc". et je veux mettre ces fichiers dans un dossier du même nom. C'est à dire : si y a un fichier arbre.doc, je veux que le script me le range dans le dossier arbre et qu'il lui donne un numéro si un fichier du même nom existe déjà.

Voila merci d'avance à tous ceux qui m'aiderons smile
Fred

Hors ligne

#2 Le 17/12/2009, à 12:34

genma

Re : [BASH] Stocker noms de dossier et fichiers dans des variables

Ca ca marche chez moi.

#!/bin/bash

for i in `find -name *.doc`
do
echo "Nom des fichiers avec chemin" $i
j=`basename $i`
echo "Nom des repertoires a creer avec .doc" $j
j=`echo $j |cut -d "." -f1`
echo "Nom des repertoires a creer" $j
if [ ! -d $j ] 
then
mkdir $j
mv $i $j
fi 
done

Ca prend en compte (pas encore) la numérotation si on a déjà un fichier existant du même nom, à un autre endroit.

Dernière modification par genma (Le 17/12/2009, à 12:45)


"Lorsque tu as découvert le libre, tu sais que tu ne pourras plus jamais revenir en arrière".
Utilisateur d'Ubuntu depuis la version 4.10 !
Mon blog ?      https://blog.genma.fr
Mon twitter?     http://twitter.com/genma

Hors ligne

#3 Le 17/12/2009, à 12:42

Tronix27

Re : [BASH] Stocker noms de dossier et fichiers dans des variables

Hello,

Voici une variante proche du code de Genma :

#!/bin/bash

rootpath=/chemin/source #  a modifier
newpath=/chemin/destination # a modifier


for i in $(find $rootpath -name "*.doc") 
	do
	
		folder=$newpath/$(basename $i | cut -d '.' -f 1)
	
		if [ $folder ]
			then
				mkdir -p $folder
		fi
		
		cp $i $folder
		
	done
	
exit 0

Pour la numérotation des fichiers, j'ai un petite idée mais j'ai pas trop le temps de regarder ça maintenant sad

A+

Hors ligne

#4 Le 17/12/2009, à 17:01

FRUiT

Re : [BASH] Stocker noms de dossier et fichiers dans des variables

 
 
incr_file ()
{
  num= ; f=$1;
  while [ -f "$f" ]; do
    num=$(($num+1))
    f=$1$num
  done
  # do whatever with $f
}

Dernière modification par FRUiT (Le 17/12/2009, à 17:04)


Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#5 Le 19/12/2009, à 19:04

Totor

Re : [BASH] Stocker noms de dossier et fichiers dans des variables

2 jours plus tard big_smile

incr_file()
{
  fichier="$(ls 2>/dev/null *"$1"|sort -nr|head -1)"
  [ "${fichier}" ] && fichier="$((${fichier%$1}+1))$1"
  echo "${fichier}"
}

l'inconvénient : il ne comble pas les trous


-- Lucid Lynx --

Hors ligne