#1 Le 17/12/2009, à 10: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
Fred
Hors ligne
#2 Le 17/12/2009, à 11: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, à 11: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, à 11: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
A+
Hors ligne
#4 Le 17/12/2009, à 16: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, à 16: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, à 18:04
- Totor
Re : [BASH] Stocker noms de dossier et fichiers dans des variables
2 jours plus tard
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