Bonjour tout le monde!
Tout d’abord je suis ravi d'avoir troué ce forum qui m'a beaucoup aidé dans ma démarche de recherche sur linux^
Bon je vous fais la version courte. J'ai un projet en cours , un truc tout bête mais je suis bloqué depuis deux semaines c'est a rendre fou. En gros, je dois écrire des lignes de codes qui prennent en argument une certaine taille en kilo octet et une ou plusieurs adresses de répertoire et qui donne a la fin la liste des fichier qui sont plus gros que la taille indiqué et donc compressible.
La difficulté étant qu'il faut exclure des résultats tout les fichiers déjà compressés du genre musique , vidéo et son. Et donner a la fin l'arborescence finale des fichier compressibles.
pour l'instant ce qu'on a trouvé se limite a ca :
find $1 -size +$2k -type f -exec file '{}' ';'
Je sais que ça fait beaucoup pour une première requête mais je suis vraiment , vraiment en galère et je trouve nulle part la réponse :o si quelqu'un a une idée je lui en serait reconnaissant a vie :o :D
merci encore pour votre attention :)
# c'est deja pas mal
Posté par NeoX . Évalué à 3.
find $1 -size +$2k -type f -exec file '{}' ';'
ta commande fonctionne ?
ca donne quoi comme resultat ?
est-ce qu'un
|egrep -v 'mp4|mp3|video|whatelse'
ne suffirait pas à supprimer des resultats tous les fichiers donc file retourne que c'est un mp3 OU un mp4 OU une video OU whatelse …[^] # Re: c'est deja pas mal
Posté par davith94 . Évalué à 1. Dernière modification le 15 février 2016 à 23:26.
Salut!
merci pour ta réponse déjà
alors avec ma commande j'ai bien les fichier qui sont plus lourd que la taille rentrée et leur type , mais j'arrive pas a virer les .avi ou .mp3 par exemple :/
et le soucis de ta commande c'est que dans mon énonce ( je l'ai pas précisé désolé), je n'ai pas le droit de me fier au suffixe des fichiers. En gros je ne peux pas cibler et virer par exemple les mp3, mp4 ou autre , je dois trouver un moyen de retirer de la liste les fichiers audio , vidéo et son en fonction de leur type directement.
Par exemple si je modifie le nom d'un fichier image et que je lui accorde un .txt , il ne va pas le virer de la liste alors qu'il faudrait :/
[^] # Re: c'est deja pas mal
Posté par NeoX . Évalué à 2.
le egrep c'est le filtre,
utilise le sur les mots que tu veux
si la reponde de file c'est Audio-wave-xxx-yyyy
tu peux tres bien filtrer sur xxx ou yyyy
man egrep
pour en savoir plus[^] # Re: c'est deja pas mal
Posté par davith94 . Évalué à 1.
Alors , la commande egrep aduio|video|image , a bien marché. J'ai plus dans ma liste les fichier son et tout.
Mais je ne trouve toujours pas la commande permettant de m'afficher l'arborescence complète des fichier obtenus :/
[^] # Re: c'est deja pas mal
Posté par feth . Évalué à 3.
Pour déterminer au doigt mouillé le type d'un fichier : "file $fichier".
Courage !
[^] # Re: c'est deja pas mal
Posté par davith94 . Évalué à 1.
Tu crois que juste rajouter après le egrep Audio|video|image suffirait? :)
Et tu connais une commande qui permet d'afficher en même temps l'arborescence des fichiers cible?
[^] # Re: c'est deja pas mal
Posté par Graveen . Évalué à 2.
le filtre agit sur le nom de fichier, via son extension.
Ce que tu proposes n'a aucun impact, sauf si tes fichiers finissent par .Audio ou .image
[^] # Re: c'est deja pas mal
Posté par davith94 . Évalué à 1.
ca a bel est bien retiré les fichier audio , image et video pourtant :o
[^] # Re: c'est deja pas mal
Posté par NeoX . Évalué à 2. Dernière modification le 16 février 2016 à 12:08.
je ne vois pas le probleme, ta premiere commande suivi d'un
egrep JPEG
on a donc bien l'arborescence : BOC2015
et le nom du fichier 006.jpg
donc si tu ne veux pas les JPEG tu fais un
egrep -v JPEG
mais le resultat doit etre similaire
[^] # Re: c'est deja pas mal
Posté par davith94 . Évalué à 1. Dernière modification le 16 février 2016 à 12:34.
En effet j'ai l'arborescence des fichiers mais elle n'est pas complète. Je veux dire, elle ne remonte pas jusqu’à home par exemple :o
[^] # Re: c'est deja pas mal
Posté par davith94 . Évalué à 1.
j'ai pensé a un "find /" , mais le problème c'est que ça me donne l'arborescence mais pour tout les fichier de l'ordi ^ alors que je voudrais que ça cible juste les résultats du find précédent et me donne leur arborescence :/
[^] # Re: c'est deja pas mal
Posté par NeoX . Évalué à 2.
je ne sais pas quel version de find tu as, mais chez moi
find /home ....
m'affiche le resultat comme ca :
sinon, ton script a l'air de prendre le dossier de recherche en argument ($1)
donc tu sais deja d'ou tu pars,
find affiche alors les chemins relatifs ce dossier.
le chemin complet à afficher est donc $1/$resultat
[^] # Re: c'est deja pas mal
Posté par davith94 . Évalué à 1.
Bonsoir!!
Alors merci beaucoup mon projet a fait un pas de géant! haha
mais j'ai toujours un soucis…
je m'explique , je veux insérer au debut de la commande une boucle for qui permettra d'indiquer si les dossiers dans le(s)quel(s) la recherche est effectuée existe(s) ou pas.
J'ai donc opté pour une boucle if
if [ !-d "$*" ]
then
echo "Attention , dossiers inexistants"
fi
Or quand je lance la commande . Quelque soit la situation ( si le dossier rentré existe ou pas ) , mon echo s'affiche! :/
Je me demande alors si j'ai fais une erreur ou si ca vient d'autre part
[^] # Re: c'est deja pas mal
Posté par NeoX . Évalué à 2.
vu que tu fais ton find avec $1
pourquoi ne fais-tu pas
[^] # Re: c'est deja pas mal
Posté par davith94 . Évalué à 1. Dernière modification le 19 février 2016 à 21:15.
Mince!! j'ai oublié de préciser les changement que j'ai du opérer!
J'ai du changer mon "dollar1" en "dollar*" pour rentrer plusieurs adresses. (vive les énoncés chiant de projet prog…)
[^] # Re: c'est deja pas mal
Posté par NeoX . Évalué à 2.
soit, mais du coup, à quel moment choisis tu la taille ?
dans ton enoncé d'origine, c'etait
$1 = le dossier
$2 = la taille
et tu faisais un
find $1 -size $2 -type f -exec ......
ce qui evidemment ne va plus fonctionner avec un $* qui va prendre tous les parametres
[^] # Re: c'est deja pas mal
Posté par davith94 . Évalué à 1.
Je vais écrire tout ce que j'ai trouver jusqu'a maintenant ce sera plus facile ^
/bin/bash
echo 'entrer la taille minimale'
read -r n
find dollar* -size +"dollarn"k -type f 2>/dev/null -exec file '{}' ';' |egrep -v 'Audio|video|etc…'
voila
tout fonctionne très bien , excepté le fait que je veuille inclure ma boucle if qui ne fonctionne pas justement
[^] # Re: c'est deja pas mal
Posté par NeoX . Évalué à 2.
donc ton cas c'est :
on a donc
$n
pour la taille et$*
pour les dossiers.dans la definition que tu donnes, tu decris
comme entant une boucle,
or cela n'en est pas une, c'est juste une CONDITION, d'ailleurs en francais (en algoritmie) on ecrit :
si tu veux faire une boucle sur tous les dossiers contenu dans $*, en algoritimie on ecrirait plutot :
evidemment rien ne t'empeche de cumuler ce qu'on vient de voir pour obtenir ton programme "intelligent"
[^] # Re: c'est deja pas mal
Posté par davith94 . Évalué à 1.
donc d’après ce que tu m'as expliqué j'ai essayé de traduire tout ça
for d in $*
do
if [ ! -d "$*" ]
then
echo "marche pas "
else
find etc grep etc…
fi
done
or…(ça aurait été trop beau si ca fonctionnait du premier coup ) j'ai obtenu que deux "marche pas" sortis de nulle part quand je rentre les bons paramètres :(
[^] # Re: c'est deja pas mal
Posté par NeoX . Évalué à 2.
l'idée et bonne, le code l'est presque
dans ton if, il faut utiliser la variable d que tu as créé plus haut (dans le for), sinon tu n'as rien changé à ton probleme de depart.
[^] # Re: c'est deja pas mal
Posté par davith94 . Évalué à 1.
j'y crois pas….depuis tout ce temps c'était une inversion des arguments…
merci , merci!! MERCI!! tu m'a permis de me coucher 2h plutôt cette nuit!
et vive le shell \o/
[^] # Re: c'est deja pas mal
Posté par NeoX . Évalué à 2.
ce n'est pas une inversion d'arguments,
c'est avoir confondu une CONDITIOIN (if xxx then yyy) avec une BOUCLE (for xxx in a b c;do action sur xxx;done)
[^] # Re: c'est deja pas mal
Posté par wismerhill . Évalué à 3.
Ce serait plus robuste de faire un "file --mime-type" suivi d'un "grep -v image/".
Je te laisse trouver un moyen d'améliorer ça pour ne pas exclure des fichiers qui se trouvent dans un répertoire appelé image sans pour autant être des images.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.