#1 Le 09/01/2011, à 12:26
- baba00000000
Bash eviter un répertoire. [Fini changer de résonement]
Bonjour à tous.
Commande:
find ~/home/baba00000000 -name '*.rar' -execdir rar e {} \;
Le bash va parcourir tout ce qui se trouve dans le répertoire baba00000000. C'est logique je lui ai demander.
Après plusieurs jours de réflexion ( et les fêtes de fin d'année passé) je me relance.
Je me suis dis pourquoi pas crée un fichier (fini.fin) qui interpellerais le bash. De manière à qu'il ne fasse rien dans le dossier ou il trouve ce fichier (fini.fin) en question.
Ce "fini.fin" serait un peux comme: " On ne touche plus à ce dossier tous à été fait avant"
La commande précédent est un exemple car peut être dans rar y a une option pour éviter de redécompresser un fichier déjà compressé.
Et sa pourrais me resservir pour d'autre prochain bash
J'en appelle à vos connaissances pour m'aider à m'orienter. Je ne veux pas forcément la réponse toute faite car j'ai une semaine de vacances pour chercher.
Merci à tous. ( j'ai essayer d'être le plus claire possible. Désoler si ce n'est pas le cas.)
Dernière modification par baba00000000 (Le 11/01/2011, à 14:17)
http://racketiciel.info/petition/ Pétition qui ferra peut être changé les installations sur les pc vendu en France.
Hors ligne
#2 Le 09/01/2011, à 15:31
- Postmortem
Re : Bash eviter un répertoire. [Fini changer de résonement]
Salut,
Jette un coup d'oeil dans le man de find et plus particulièrement à l'option -path
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#3 Le 09/01/2011, à 16:13
- ehmicky
Re : Bash eviter un répertoire. [Fini changer de résonement]
Salut,
Si tu as le choix de la compression, je te conseille .tar.bz2 ou .tar.gz, plutôt que .rar qui est proprio.
Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?
Hors ligne
#4 Le 09/01/2011, à 16:30
- baba00000000
Re : Bash eviter un répertoire. [Fini changer de résonement]
@echmicky: je le sais j'ai même rencontré pas mal de problème avec. Mais c'est pas moi qui choisi. Je ne veux plus entendre parlé du rar quand c'est moi qui compresse
@Postmortem: merci je regarde
http://racketiciel.info/petition/ Pétition qui ferra peut être changé les installations sur les pc vendu en France.
Hors ligne
#5 Le 09/01/2011, à 17:05
- ehmicky
Re : Bash eviter un répertoire. [Fini changer de résonement]
Sinon, quand tu veux faire des trucs pas trop simples via find, tu peux faire :
while read
do
#"$REPLY" sera égal au chemin de chaque répertoire
done < <(find ...)
Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?
Hors ligne
#6 Le 10/01/2011, à 00:45
- baba00000000
Re : Bash eviter un répertoire. [Fini changer de résonement]
-path motif
Fichier dont le nom complet correspond au motif fourni. Lors du
developpement des meta-caracteres, `/' et `.' ne sont pas
traites differemment des autres caracteres, ainsi par exemple :
find . -path './sr*sc'
affichera l'element de repertoire intitule './src/misc' (s'il en
existe un). Pour ignorer une arborescence complete de reper-
toires, utilisez l'option -prune plutot que de verifier chaque
fichier de l'arbre. Par exemple, pour ignorer le repertoire
`src/emacs' et tous ses sous-repertoires, tout en affichant le
nom de tous les autres fichiers, faites quelque chose comme :
find . -path './src/emacs' -prune -o -print
donc j'ai fait des testes
find ~/baba00000000 -path '~/baba00000000/nouveaudossier' -name '*.part1.rar' -execdir rar e {} \;
ou
find ~/baba00000000 -path 'fin.fin' -name '*.part1.rar' -execdir rar e {} \;
Sans le path sa marche, mais avec le path avant ou après -name rien.
voilà le résultat avec l'option -x:
+ find -path '~/baba00000000/nouveaudossier' -name '*.part1.rar' -execdir rar e '{}' ';'
J'ai peut être pas tout compris c'est possible aussi.
Edit: @ehmicky: je réfléchi à votre idée pendant la nuit.
Dernière modification par baba00000000 (Le 10/01/2011, à 01:00)
http://racketiciel.info/petition/ Pétition qui ferra peut être changé les installations sur les pc vendu en France.
Hors ligne
#7 Le 10/01/2011, à 00:52
- ehmicky
Re : Bash eviter un répertoire. [Fini changer de résonement]
Tu dois penser -path comme ça : c'est exactement comme -name, sauf que cela prend en compte tout le chemin du fichier, et non seulement le basename.
Donc, d'ailleurs, comme -name, le pattern (globbing) doit correspondre parfaitement, et non seulement être contenu (d'où le fait de mettre des * souvent à la fin ou au début du pattern)
De toute façon, ça m'a l'air un peu brouillon de laisser des fichiers vides pour attester que le fichier .rar ait été décompressé. Il faudrait que tu postes le cas précis, mais je sais pas, par exemple, sinon, avec rar, tu peux rajouter des commentaires pour attester de sa décompression, etc.
Bon, c'est pas terrible, mais au moins, ça a le mérite de pas rajouter de fichiers, mais d'inscrire le fait que l'archive a été décompressée directement dans l'archive :
phrase="Cette archive a été décompressée."
while read
do
[[ ! $(rar cw "$REPLY") =~ $phrase ]]\
&& rar e "$REPLY"\
&& rar c "$REPLY" <<<"$phrase"$'\n'"$(rar cw "$REPLY" | tail -n+4)"
done < <(find ~/baba -name "*.rar")
(Traduction des trois lignes centrales : 1) Si les commentaires du .rar contienne la phrase "Cette archive etc., 2) l'archive est décompressée, 3) et la phrase "Cette archive etc." est rajoutée à la fin des commentaires de l'archive.
Tu pourrais aussi effectivement créer un fichier vide, ou utiliser l'atime comme témoin, mais ça me semble une moins bonne idée, même si ça réduirait la taille du code.
Dernière modification par ehmicky (Le 10/01/2011, à 01:36)
Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?
Hors ligne
#8 Le 10/01/2011, à 01:20
- baba00000000
Re : Bash eviter un répertoire. [Fini changer de résonement]
J'ai très peux de connaissance. Je n'ai pas forcement le bon raisonnement. C'est pas grave j'apprends.
J'avais écris un beau bash ( façon de parler) avec beaucoup d'aide du forum et je me rends compte maintenant que je n'ai pas pensé à une chose.
lftp sftp://adresse -e "mirror --newer-than=now-2days /travail /home/baba00000000 ; quit"
find ~/home/baba00000000 -name '*.rar' -execdir rar e {} \;
find ~/home/baba00000000 -name '*.rar' mv {} ~/.local/share/Trash/files/ \;
Si je déplace les points rar à la corbeille. A la prochaine demande de synchronisation de mon ordinateur au FTP il recommencera à télécharger les parties manquantes. Bref perte de temps.
Peut être que le problème est mieux posé maintenant.
Edit: je laise pas le fichier vide. C'est un répertoir qui contient une archive. Au final j'ai un dossier avec un fichier décompressé à l'interieur
Edit2: avec ton explication j'ai peut être 3 étapes alors que toi tu n'en a qu'une.
Dernière modification par baba00000000 (Le 10/01/2011, à 01:27)
http://racketiciel.info/petition/ Pétition qui ferra peut être changé les installations sur les pc vendu en France.
Hors ligne
#9 Le 10/01/2011, à 01:28
- ehmicky
Re : Bash eviter un répertoire. [Fini changer de résonement]
Le fichier vide, c'est le fichier fich.fin dont tu parlais, tu parais bien d'un fichier vide ? Je trouve que c'est un peu brouillon de laisser de tels fichiers partout. Sinon, j'ai proposé une solution en haut, en espérant que ça marche.
Sinon :
find ~/home/baba00000000 -name '*.rar' -execdir rar e {} \;
find ~/home/baba00000000 -name '*.rar' mv {} ~/.local/share/Trash/files/ \;
(il manque un -execdir d'ailleurs, tu as dû recopier de tête), tu peux faire :
find ~/home/baba00000000 -name '*.rar' -execdir rar e {} \; -execdir mv {} ~/.local/share/Trash/files/ \;
Ca te sauve le temps de calcul d'un find
D'ailleurs, là, je comprends parce que si tu supprimes tes .rar après extraction, pourquoi crains-tu de les supprimer deux-fois de suite (à moins que justement tu souhaites éviter de les supprimer)
Dernière modification par ehmicky (Le 10/01/2011, à 01:33)
Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?
Hors ligne
#10 Le 10/01/2011, à 01:37
- baba00000000
Re : Bash eviter un répertoire. [Fini changer de résonement]
Désoler j'avais pas tilté et oui c'est un fichier vide, et vu l'heure le cerveau pédale dans la choucroute. Donc je vais reprendre tous ça au calme demain car j'ai plein de temps libre.
Et merci pour l'aide rapide.
Edit: ce que je veux éviter de que sa synchronise deux fois le même dossier. Car une fois que le fichier est décompresser je n'ai plus à synchroniser ce dossier. J'y touche plus.
Dernière modification par baba00000000 (Le 10/01/2011, à 01:44)
http://racketiciel.info/petition/ Pétition qui ferra peut être changé les installations sur les pc vendu en France.
Hors ligne
#11 Le 10/01/2011, à 15:43
- baba00000000
Re : Bash eviter un répertoire. [Fini changer de résonement]
Voilà où j'en suis aujourd'hui.
D'après ce que j'ai compris j'ai fais des tests avec ta partie de code.
1er chose il décompresse dans mon home et pas dans le dossier du rar ( c'est un petit problème)
2ème chose j'ai ça:
- Si je supprime les .rar quand je relance mon bash il les retélécharges.
- Si je l'ai garde j'ai mes rar et les fichiers ce qui prend double place.
Sa cafouille quelque pars dans ma tête.
Edit: j'ai fait un mirroir avec le FTP, peut être serait t'il possible qu'au prochain lancement du bash il ne regarde pas dans les dossiers précédemment créé et tranfert que les nouveau dossier qui n'ont jamais été crée au paravent.
Dernière modification par baba00000000 (Le 10/01/2011, à 16:27)
http://racketiciel.info/petition/ Pétition qui ferra peut être changé les installations sur les pc vendu en France.
Hors ligne
#12 Le 10/01/2011, à 17:28
- Postmortem
Re : Bash eviter un répertoire. [Fini changer de résonement]
-path motif Fichier dont le nom complet correspond au motif fourni. Lors du developpement des meta-caracteres, `/' et `.' ne sont pas traites differemment des autres caracteres, ainsi par exemple : find . -path './sr*sc' affichera l'element de repertoire intitule './src/misc' (s'il en existe un). Pour ignorer une arborescence complete de reper- toires, utilisez l'option -prune plutot que de verifier chaque fichier de l'arbre. Par exemple, pour ignorer le repertoire `src/emacs' et tous ses sous-repertoires, tout en affichant le nom de tous les autres fichiers, faites quelque chose comme : find . -path './src/emacs' -prune -o -print
donc j'ai fait des testes
find ~/baba00000000 -path '~/baba00000000/nouveaudossier' -name '*.part1.rar' -execdir rar e {} \; ou find ~/baba00000000 -path 'fin.fin' -name '*.part1.rar' -execdir rar e {} \;
Sans le path sa marche, mais avec le path avant ou après -name rien.
Je vois que tu es parti sur autre chose mais pour exclure un répertoire de la recherche de find, il faut faire ainsi :
find /repertoire/de/base -path /repertoire/de/base/rep/a/exclure -prune -o -name '*.part1.rar' -print
Cette commande te listera tous les fichiers '*.part1.rar' sous /repertoire/de/base sauf ceux qui sont dans /repertoire/de/base/rep/a/exclure
Dernière modification par Postmortem (Le 10/01/2011, à 17:29)
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#13 Le 10/01/2011, à 17:53
- baba00000000
Re : Bash eviter un répertoire. [Fini changer de résonement]
Merci pour l'exemple je comprends mieux comment marche la fonction path maintenant que je n'avais toujours pas saisi avant ton message.
C'est une super solution, mais je crois quel ne convient pas à mon problème. Je récupère mes dossiers sur un FTP. Je ne peux pas savoir à l'avance le nom du répertoire que je voudrait bloquer. Et aussi j'ai beaucoup de dossier.
Je voulais exclure les dossiers finis et qu'il ne rentre plus dans la routine du bash dans les prochaines exécutions.
D'ou mon fichier fini.fin il le trouve il passe son chemin s'en rien faire. Peut être que dans la commande find il existe cette fonction. ( je vais lire en entier le man)
Je suis peut être pas très claire dans mes explications
Mais merci car j'ai appris des choses.
http://racketiciel.info/petition/ Pétition qui ferra peut être changé les installations sur les pc vendu en France.
Hors ligne
#14 Le 11/01/2011, à 14:16
- baba00000000
Re : Bash eviter un répertoire. [Fini changer de résonement]
Bon je m'excuse, je pense que j'ai pas pris le problème dans le bon sens.
A force de réfléchir c'est au niveau du téléchargement que je dois agir.
Je vais réouvrir un topic claire.
Merci beaucoup de m'avoir aider et de m'avoir apris plein de chose et d'être patient avec moi.
Edit: voilà le nouveau post si sa interresse des personnes http://forum.ubuntu-fr.org/viewtopic.ph … 2#p3944052
Dernière modification par baba00000000 (Le 11/01/2011, à 14:39)
http://racketiciel.info/petition/ Pétition qui ferra peut être changé les installations sur les pc vendu en France.
Hors ligne