Shell-script (Besoin d'aide) - Divers - Programmation
Marsh Posté le 08-05-2007 à 22:34:32
Comment fonctionne la récursivité en shell script ?
Comme en C ?
Marsh Posté le 09-05-2007 à 00:08:31
y a pas moyen à coup d'un tar --remove-files dont l'output est redirigé vers /dev/null ?
Marsh Posté le 09-05-2007 à 00:16:08
bah si il peut pas utiliser ls ca m etonnerait que tar soit autoriser
Sinon j suis pas top en shell script mais pour la recursivité c est rm -r (a utiliser avec precaution )
Marsh Posté le 09-05-2007 à 00:21:15
il faut demander sur programmation
je transfère ...
Marsh Posté le 09-05-2007 à 10:34:46
Voila un algorithme du script, si vous avez des suggestions pour le traduire, elles sont les bienvenues :
fonction chercher()
debut
dossier = $1
Pour tous les éléments du dossier
Si (element est un fichier) et (element commence et fini par #) ou (element fini par ~) ou (élément commence par . et fini par ~)
supprimer element
Sinon
Si element est un repertoire
chercher() $element
fin si
fin si
fin
chercher () . // On oublie pas de lancer la recherche dans le repertoire courant
Marsh Posté le 09-05-2007 à 10:36:14
Parcourir le contenu d'un repertoire :
for i in * .*; do
blablabla
done
if [ -d $i ] pour verifier si $i est un repertoire.
Marsh Posté le 09-05-2007 à 13:25:48
EDIT : ne pas tenir compte de ma solution, puisqu'il n'est pas possible d'utiliser "find" (et pourquoi pas programmer sans les mains et dans le noir ?)
Avec la commande find, la recherche se fait dans les sous-répertoires.
find . -type f -exec ls {} \; ...autres paramètres... >liste_fichiers.tmp |
Marsh Posté le 09-05-2007 à 17:28:51
Mon prof vient de me donner une info, il faut utiliser le resultat d'une commande echo comme un vecteur de variable ...
J'ai essayé, mais ca ne fonctionne pas, quelqu'un vois la ou les erreur et les modification à faire:
function nettoyer (){
elus=$(echo * .*)
for elu in $elus;do
if [ -e $elu -a -d $elu -a $elu != ".." -a $elu != "." ]
then
cd $elu
nettoyer
else
if [ $elu=".*~" -o $elu="*#" -o $elu="*~" ]
then
rm $elu
fi
fi
done
}
Marsh Posté le 08-05-2007 à 21:59:53
Bonsoir, j'ai un exercice assez complexe à faire, voila l'énnoncé:
Écrire un script-shell nettoyer.sh qui supprime à partir du répertoire courant tous les fichiers dont le nom se termine
par un caractère ∼ (même si le nom du fichier commence par un caractère .) ou dont le nom débute et se termine par un caractère # ; ces fichiers sont fréquemment des fichiers temporaires. La suppression de ces fichiers devra seffectuer récursivement dans toute la sous-arborescence du répertoire courant et devra fonctionner même à lintérieur des sous-répertoire dont le nom commence par un caractère .. Outre lensemble des commandes internes au shell bash, les seules commandes externes utilisables sont dirname, basename et bien entendu rm.
Votre script-shell NE DEVRA PAS utiliser les commandes ls, find, grep ou egrep.
Piste:
Je pensais que l'on pouvais par exemple afficher les fichiers que l'on souhaitait avec quelque chose qui ressemblerait a :
echo */[#]*[#] .*[~] *[~]
puis les supprimer avec un for:
for elu in $(echo */[#]*[#] .*[~] *[~]);
do
rm $elu
done
Bien sûr j'ecris tous ca, mais j'ai pas réussi à mettre ca en forme ....
Si on pourrait me guider sur cette piste ou une autre ca serait cool !
Merci d'avance !