Ce script ne veut pas fonctionner - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 14-02-2004 à 21:30:33
Messages d'erreurs ?
Marsh Posté le 14-02-2004 à 21:34:19
Si je laisse le "if" qui teste si c'est un fichier, j'ai aucun message d'erreur mais il liste rien
Si j'enlève ce "if", il liste ce que je veux, mais AUSSI les dossiers, et ca il ne faudrait pas. En plus il me faire un "unary error expected"...Pourtant je compare bien 2 valeures qui se compare...
Je suis tellement concentré dedans que je n'y vois plus rien...
Marsh Posté le 14-02-2004 à 23:31:31
Execute ton script avec affichage des commandes exécutées et analyse se qui se passe.
bash -x the_script taille rep 2>&1 | more
Marsh Posté le 15-02-2004 à 00:06:04
Peut être que mon code ne fait pas ce que je pense qu'il doit faire...
Code :
|
Marsh Posté le 15-02-2004 à 06:20:08
Je l'ai modifié un peu mais ca donne pas encore le résultat escompté....
-Il ne doit pas lister les répertoires, juste les fichiers
-Il me fait cette erreur
-J'arrive pas à le formater
Code :
|
Marsh Posté le 15-02-2004 à 07:44:55
tu veux du récursif aussi, c'est à dire lister les fichiers des sous-répertoires aussi ?
Marsh Posté le 15-02-2004 à 08:26:07
bon, avec du récursif :
|
résultat :
|
Marsh Posté le 15-02-2004 à 10:03:59
_Faust_, je pense que ton problème vient des 'cut'.Dasn le résultat de la commande 'ls' les colonnes sont séparées par plusieurs espaces et pour cut chaque espace délimite un champ (ce n'est pas comme pour le shell).
|
Tu te retrouves avec taille="", ce qui te donne pour le test
if [ -gt val$1 ]; then
d'où le pb de -gt: unary operator expected
Il vaut mieux mettre les opérandes entre guillemets dans le test
if [ "${taille}" -gt "${1}" ]; then
Il vaut mieux utiliser 'read' pour décomposer la ligne.
De plus comme tu liste les fichiers par ordre décroissant (-S),
tu peux arrêter de tester dés que tu tu rencontres un fichier plus petit.
[/fixed]
ls -lS $2 | \
while read perms hlinks owner group taille date mois fichier
do
if [ "${taille}" -gt "${1}" ]
then
echo -e "\t$fichier\t$date\t$mois$taille"
else
break
fi
done
[/fixed]
Marsh Posté le 15-02-2004 à 10:05:11
aigles a écrit : _Faust_, je pense que ton problème vient des 'cut'.Dasn le résultat de la commande 'ls' les colonnes sont séparées par plusieurs espaces et pour cut chaque espace délimite un champ (ce n'est pas comme pour le shell).
|
Marsh Posté le 15-02-2004 à 17:27:40
aigles, ca marche ceci chez toi ou il y a qq chose que je n'ai pas compris?
Code :
|
Marsh Posté le 15-02-2004 à 19:06:25
Désolé, ça ne marche effectivement pas, 'read' ne semble pas capable de lire des données depuis un pipe (avec ksh pas de pb).
Voila donc une nouvelle version du script:
Code :
|
Marsh Posté le 15-02-2004 à 22:08:06
bon, grâce à vous ca très bien. J'ai changé quelques trucs pour le peaufiner, et j'ai fais une boucle pour ne pas lister les dossiers.
D'ailleurs, c'est la seule facon que j'ai trouvé pour ne pas lister les dossiers, mais je me demandais si c'était "de la programmation conforme" ou si c'est inhabituel.
Code :
|
Marsh Posté le 16-02-2004 à 13:08:37
Tu ne devrais pas tester de cette façon si le fichier est un répertoire.
Les permissions sur le répertoires ne sont pas obligatoirement "drwx------", par contre cela commence toujours par "d". Il suffit fonc d'éliminer les fichiers pour lesquels perms commence par "d" :
Code :
|
Marsh Posté le 14-02-2004 à 21:26:59
Bon, c'est le dernier....
Qu'est-ce qui marche pas dans ce foutu script....
Tu rentre la valeur et le dossier et il affiche tous les fichiers qui dépasse la valeur dans le dossier...