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 16/11/2011, à 23:42

baba00000000

[Résolu] commande Find puis trier par groupe.

Bonsoir à tous,

J'aurais voulus savoir si il est possible de réaliser cette idée:

Par exemple j'ai plein de fichiers .rar couper ( part1.rar, part2.rar, ...)
Avec la commande find j'arrive à les lister:

~/Dossier/toto.part1.rar
~/Dossier/toto.part2.rar
...
~/Dossier/tata.part1.rar
~/Dossier/tata.part2.rar
...

Est il possible de les triés par groupe ( tout les parties d'un fichier rar ensemble) toto et tata, ...? Puis d'enregistrer chaque groupe dans un fichier.txt différent afin de pouvoir réutilisé ce .txt dans la suite de mon bash en lecture ligne par ligne?
Peut être existe t'il un moyen sans passé par des fichiers text temporaire.

fichier.txt :
Tout les toto.part ....

fichier2.txt: 
Tout les tata.part ....

...

Merci de m'avoir lu, et me tiens à disposition pour répondre à des questions supplémentaire.

Dernière modification par baba00000000 (Le 18/11/2011, à 17:31)


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 17/11/2011, à 00:09

pingouinux

Re : [Résolu] commande Find puis trier par groupe.

Bonsoir,
Peut-être ceci :

for prefix in toto tata ...
do
   find ~ -name $prefix.\*.rar | sort -V >$prefix.txt
done

Hors ligne

#3 Le 17/11/2011, à 00:10

Watael

Re : [Résolu] commande Find puis trier par groupe.

salut,

avec une entrée triée comme celle-là

echo "foo.part1.rar
foo.part2.rar
bar.part1.rar
bar.part2.rar
baz.part1.rar
baz.part2.rar" | while read line; do if [ "$groupe" != "${line%%.*}" ]; then groupe="${line%%.*}"; echo "nouveau groupe : $groupe"; fi; echo "$line >> $groupe.txt"; done

bon, faut adapter un peu et retirer le chemin (~/Dossier/) pour obtenir le nom du fichier si tu en as besoin.

grosso modo, quand la partie de la ligne avant le premier point change, la variable groupe est mise à jour.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#4 Le 17/11/2011, à 00:32

sputnick

Re : [Résolu] commande Find puis trier par groupe.

Ma version avec les "parameter expansions" de bash (builtins)

En full bash :

$ ls -1
bar.part1.rar
bar.part2.rar
baz.part1.rar
baz.part2.rar
foo.part1.rar
foo.part2.rar
$ 
$ printf '%s\n' * | while read a; do echo "$a" >> "${a%%.*}.lst"; done
$ 
$ ls -1 *lst
bar.lst
baz.lst
foo.lst
$ 
$ cat bar.lst
bar.part1.rar
bar.part2.rar

Avec ton find :

$ while read a; do echo "$a" >> "${a%%.*}.lst"; done < <(find . -name '*part*.rar*')

Dernière modification par sputnick (Le 17/11/2011, à 00:33)


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#5 Le 17/11/2011, à 00:40

pingouinux

Re : [Résolu] commande Find puis trier par groupe.

sputnick #4 a écrit :

find . -name '*part*.rar*' | while read a; do echo "$a" >> "${a%%.*}.lst"; done

Solution élégante, qui nécessite cependant une petite adaptation :
Le nom du fichier commençant par ./ , ${a%%.*} renvoie une chaîne vide.

Hors ligne

#6 Le 17/11/2011, à 00:45

Watael

Re : [Résolu] commande Find puis trier par groupe.

sputnick a écrit :

$ printf '%s\n' * | while read a; do echo "$a" >> "${a%%.*}.lst"; done

oui, mon test est superflu.
du coup, la boucle while aussi

for f in ~/Dossier/*.rar; do fic="${f##*/}"; fic="${fic%%.*}; echo "$f" >> "$fic.txt"; done

Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#7 Le 17/11/2011, à 01:16

sputnick

Re : [Résolu] commande Find puis trier par groupe.

Merci pingouinux, effectivement j'avait pas testé mon find, il faut donc rajouter : -printf '%f\n' ce qui donnes :

while read a; do echo "$a" >> "${a%%.*}.lst"; done < <(find . -name '*part*.rar*' -printf '%f\n')

Ou encore avec awk :

printf '%s\n' ./Dossier/* | awk -F'[/.]' '{print $0 > $4".lst"}'

On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#8 Le 18/11/2011, à 17:31

baba00000000

Re : [Résolu] commande Find puis trier par groupe.

Merci à vous 3 pour les propositions.
Ça marche nickel
Je vais mettre résolu.

Dernière modification par baba00000000 (Le 18/11/2011, à 18:46)


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 18/11/2011, à 17:35

sputnick

Re : [Résolu] commande Find puis trier par groupe.

u'r welKome dude wink


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne