Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 09/01/2011, à 13: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, à 15:17)


http://racketiciel.info

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, à 16: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, à 17: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. smile


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, à 17: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  big_smile

@Postmortem: merci je regarde


http://racketiciel.info

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, à 18: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, à 01: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, à 02:00)


http://racketiciel.info

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, à 01: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, à 02: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, à 02: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, à 02:27)


http://racketiciel.info

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, à 02: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 smile

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, à 02: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, à 02: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, à 02:44)


http://racketiciel.info

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, à 16: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, à 17:27)


http://racketiciel.info

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, à 18:28

Postmortem

Re : Bash eviter un répertoire. [Fini changer de résonement]

baba00000000 a écrit :
-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, à 18:29)


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#13 Le 10/01/2011, à 18: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 big_smile

Mais merci car j'ai appris des choses.


http://racketiciel.info

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, à 15: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, à 15:39)


http://racketiciel.info

http://racketiciel.info/petition/ Pétition qui ferra peut être changé les installations sur les pc vendu en France.

Hors ligne