#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/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.
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.
$ 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/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
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne