Aller au contenu

Un peu d'aide sur un petit script bash


Faust

Messages recommandés

j'arrive pas à voir ce qui marche pas la dedans...

Le but est de prendre tout les fichiers dans le sous répertoire et les mettre dans le répertoire parent...

QQ'un peut m'enligner un peu?

#!/bin/bash
echo Quel dossier voulez vous nettoyer?
read folder
for folder in `find -type d`; do
for fichier in $folder/*; do
if [ -f $fichier ]; then
mv $fichier $folder
else echo blabla
fi
done
done

Lien vers le commentaire
Partager sur d’autres sites

#!/bin/bash

echo Quel dossier voulez vous nettoyer?

read folder

for folder in `find -type d`; do

Et hop tu viens d'écraser ta variable "folder"...

for fichier in $folder/*; do

if [ -f $fichier ]; then

mv $fichier $folder

else echo blabla

fi

done

done

J'ai pas trop compris ce que tu veux faire, mais je te propose ça :

Si tu veux déplacer récursivement tous les fichiers d'un dossier A dans un dossier B :

find dossier_A -type f -exec mv {} dossier_B \;

Et c'est tout. C'était bien ça ?

A+

Gauret

Lien vers le commentaire
Partager sur d’autres sites

#!/bin/bash

echo Quel dossier voulez vous nettoyer?

read folder

for folder in `find -type d`; do

Et hop tu viens d'écraser ta variable "folder"...

for fichier in $folder/*; do

if [ -f $fichier ]; then

mv $fichier $folder

else echo blabla

fi

done

done

J'ai pas trop compris ce que tu veux faire, mais je te propose ça :

Si tu veux déplacer récursivement tous les fichiers d'un dossier A dans un dossier B :

find dossier_A -type f -exec mv {} dossier_B \;

Et c'est tout. C'était bien ça ?

A+

Gauret

mv dossier_A dossier_B, c'est pas plus simple ??

Lien vers le commentaire
Partager sur d’autres sites

mv dossier_A dossier_B, c'est pas plus simple ??

Nope, parce qu'un simple mv dossier_A dossier_B ça conserve les sous répertoires de A. Si j'ai bien compris, il veut "mettre à plat" le dossier : tous les fichiers de dossier_A et de tous ses sous-répertoires doivent se retrouver directement à la racine de dossier_B.

Mais c'est peut-être pas ça que cherche à faire Faust en fait. Non ?

A+

Gauret

Lien vers le commentaire
Partager sur d’autres sites

dur de savoir si on a des réponses...le forum m'envoit rien dans mon courriel...

bon, la manip peut sembler étrange, c'est pour un travail pratique.

J'en connais pas beaucoup sur Linux, et encore moins sur les scripts, mais bon, à force de lire et de lire j'en suis arrivé à ce que j'ai écrit plus haut...

à force d'essayer j'ai aussi boussiller ma machine, mais ca c'est autre chose...

le vrai problème c'est : "Faire un script en Shell du nom de cleandir avec un nombre variable de paramètres qui sont des répertoires existants dans le répertoire courant. Pour chacun des répertoires nommés, le script doit déplacer tous ses fichiers au répertoire courant. Si les noms des fichiers sont identiques, le script doit concatener les fichiers sous un même nom dans le répertoire courant. Quand les répertoires nommés sont vides, ils doivent être détruits."

Alors j'imagine qu,avec find dossier_A -type f -exec mv {} dossier_B \; , je devrais rajouter un " if fichier du dossier_A=fichier du dossier_B cat fichier_A >> fichier_B et if folder_A est vide rm -f"

Lien vers le commentaire
Partager sur d’autres sites

La commande find:

find repertoire de départ [critères] [options de commande]

La commande find permet de rechercher un fichier dans l arborescence à partir du répertoire spécifié, et ce de manière récursive.

Si aucune indication n'est faite, la commande find cherche tous les fichiers. Il est cependant possible de mentionner des options de recherche pour limiter celle-ci. Si cette commande a trouvé un fichier correspondant au critère, il est traité par les options de commande. Si aucune option n'est mentionnée, il ne se passe rien. Comme option de commande, vous pouvez utiliser -print, -exec et -ok.

Voici quelques options de choix utilisables pour limiter la recherche:

-name fichier recherche par nom de fichier (metacaractères autorisés)

-type type recherche par type de caractère

-user nom recherche par propriétaire

-perm droits recherche par droits d acces

Voilà j espere que mon explication de la commande find est claire :eeek2:

Lien vers le commentaire
Partager sur d’autres sites

dans le cas de ton TP, alors, plutôt qu'un mv tu fais un bête cat /repsource/fichier >> /fichier (si le fichier existe, concat, sinon, create :)

kekvous pensez de ça ?

#!/bin/sh

# tant que le premier paramètre n'est pas vide

while [ -n $1 ]

do

# je recupère tous les fichiers du répertoire (bon OK tous les fichiers avec des noms "normaux")

list=`ls $1`

for i in $list

do

# je concatène vers le repertoire local, nom de fichier courant (merci basename)

cat $i >> `basename $i`

# en option, je vire le fichier copié

rm $i

done

# je décale mes arguments de 1 ( $2 devient $1, etc. plus élégant qu'un for dans $#)

# on pourrait faire + élegant et - lisble avec une condition sur le code retour de shift :)

shift 1

done

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...