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.

#1951 Le 16/05/2011, à 17:25

Rolinh

Re : /* Topic des codeurs couche-tard [4] */

Pylade a écrit :

Au fait, -p à mkdir ne sert à rien.

Pourquoi ça?

(merci pour le reste smile )

EDIT: j'suis bête, t'as parfaitement raison

EDIT2: heu non, j'avais bien mis le -p pour une raison en fait (pour qu'il ne tente pas de recréer le dossier)

EDIT3: pour le if CURID, j'avais fait comme toi le premier coup mais j'avais une erreur d'où la comparaison pas jolie

Dernière modification par Rolinh (Le 16/05/2011, à 17:33)

Hors ligne

#1952 Le 16/05/2011, à 17:58

Pylades

Re : /* Topic des codeurs couche-tard [4] */

Rolinh a écrit :

[…]
EDIT2: heu non, j'avais bien mis le -p pour une raison en fait (pour qu'il ne tente pas de recréer le dossier)

Mouais, j’aurais plutôt fait un 2>/dev/null voire un test -d plouf || mkdir plouf, pour ça… Mais bon, c’est vrai que -p c’est moins verbeux… neutral


Rolinh a écrit :

EDIT3: pour le if CURID, j'avais fait comme toi le premier coup mais j'avais une erreur d'où la comparaison pas jolie

Ouais, il y a un truc bizarre autour de ce if


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#1953 Le 16/05/2011, à 18:12

Rolinh

Re : /* Topic des codeurs couche-tard [4] */

Bon, ça mérite encore d'être propré. Merci pour ton aide smile

Hors ligne

#1954 Le 16/05/2011, à 18:13

Pylades

Re : /* Topic des codeurs couche-tard [4] */

#!/bin/bash
# This script creates folders in which to move files according to their
# ID given in their filename as in, for example, 12345_bob_marley_london.mov
# 12345 would be the ID

echo 'Yay, I will clean YOUR mess...'
echo 'Moving files:'
while read file; do
    CURID=$(egrep -o *'[[:digit:]]+'* <<< $file)
    if [ $CURID ]; then
        mkdir -p $CURID
        while read tomove; do
            mv -v "$tomove" $CURID 2>/dev/null
        done < <(ls | grep '\(^\|_\)'$CURID'\($\|_\)')
    fi
done < <(find -P `pwd` -maxdepth 2 | sed 's!.*/!!')
find . -type d -empty -exec rmdir {} \;
echo 'Hurray, everything has been sorted out!'

Ah, bah ça va marcher beaucoup mieux, là, forcément… ><"

Dernière modification par Pylade (Le 16/05/2011, à 18:16)


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#1955 Le 16/05/2011, à 18:15

Pylades

Re : /* Topic des codeurs couche-tard [4] */

(Cela dit, il y a encore à améliorer. Mais je veux prendre une pause. tongue)


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#1956 Le 16/05/2011, à 18:18

Rolinh

Re : /* Topic des codeurs couche-tard [4] */

smile
Ceci dit, cela ne marche de nouveau plus tongue
(il ne créé pas tous les dossiers nécessaires maintenant)

EDIT: t'as réédit, faut que je retest^^

EDIT2: en fait, t'as juste viré une variable mais ça ne marche toujours pas^^

Dernière modification par Rolinh (Le 16/05/2011, à 18:20)

Hors ligne

#1957 Le 16/05/2011, à 18:22

Pylades

Re : /* Topic des codeurs couche-tard [4] */

Schgrmbl…


Verrai plus tard.


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#1958 Le 16/05/2011, à 18:23

Rolinh

Re : /* Topic des codeurs couche-tard [4] */

lol

Moi aussi (vais rentrer chez moi déjà^^)

Hors ligne

#1959 Le 16/05/2011, à 20:30

Pylades

Re : /* Topic des codeurs couche-tard [4] */

#!/bin/bash
# This script creates folders in which to move files according to their
# ID given in their filename as in, for example, 12345_bob_marley_london.mov
# 12345 would be the ID

echo 'Yay, I will clean YOUR mess...'
echo 'Moving files:'
while read file; do
    CURID=$(egrep -o *'[[:digit:]]+'* <<< $file)
    if [ -n $CURID ]; then
    test -d $CURID || mkdir $CURID
    while read tomove; do
            mv -v "$tomove" $CURID
        done < <(ls | grep '\(^\|_\)'$CURID'\(_.*\)\(\.mov$\|\.jpg$\|\.xml$\)')
    fi
done < <(find -P `pwd` -maxdepth 2 | sed 's!.*/!!')
find . -type d -empty -exec rmdir {} \;
echo 'Hurray, everything has been sorted out!'

Ceci fonctionne, j’ai testé, au prix d’un regex à coucher dehors.
Mais au moins la regex rend le truc vraiment secure ; c’est du béton armé. wink

Bon, je vais regarder le find, là…

Dernière modification par Pylade (Le 16/05/2011, à 20:32)


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#1960 Le 16/05/2011, à 20:33

Rolinh

Re : /* Topic des codeurs couche-tard [4] */

smile

Je venais de me remettre dessus.
Ouep, c'est une bonne idée le filtre (je pensais intégrer un truc dans le genre par la suite) mais... il me semble que tu ne prends pas en compte les fichiers dans un sous-dossier qu'il faut aussi trouver et déplacer.

Je test de suite smile

EDIT: ouep, pour le find doit y avoir moyen de faire quelque chose (mon sed ne me plait pas trop en fait...)

EDIT2: il y a quelque chose qui lui plait pas avec ta façon de faire:

[robin@odin ~/Scripts/sandbox] % ls
234234_ihdfih_ihf.png  234455_Seal_houp.png  movmov       movmov_pylade  unit_234455.xml
234455_Seal_houp.mov   gg                    movmov.html  unit_1840.xml
[robin@odin ~/Scripts/sandbox] % ./movmov_pylade 
Yay, I will clean YOUR mess...
Moving files:
`234455_Seal_houp.mov' -> `234455/234455_Seal_houp.mov'
find: `./184056': No such file or directory
find: `./1840': No such file or directory
find: `./234234': No such file or directory
Hurray, everything has been sorted out!
[robin@odin ~/Scripts/sandbox] % ls
234234_ihdfih_ihf.png  234455_Seal_houp.png  movmov       movmov_pylade  unit_234455.xml
234455                 gg                    movmov.html  unit_1840.xml
[robin@odin ~/Scripts/sandbox] % 

Dernière modification par Rolinh (Le 16/05/2011, à 20:36)

Hors ligne

#1961 Le 16/05/2011, à 20:42

Pylades

Re : /* Topic des codeurs couche-tard [4] */

Hum, en effet, il râle pour le sous dossier. Ça confirme le fait qu’il va falloir bosser sur le find (c’est lui qui râle).


Édit : pour la sortie que tu as, je parie que gg est un sous-dossier. wink

Dernière modification par Pylade (Le 16/05/2011, à 20:45)


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#1962 Le 16/05/2011, à 20:43

Rolinh

Re : /* Topic des codeurs couche-tard [4] */

Avec ma version, pas de soucis avec le find pourtant...

Hors ligne

#1963 Le 16/05/2011, à 20:46

Pylades

Re : /* Topic des codeurs couche-tard [4] */

Édité…


Ouais, pas de soucis de find avec ta version. J’ai dû faire une supposition sur le find qui n’avais pas raison d’être…


Je vais manger et je regarde (je veux réussir tongue).


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#1964 Le 16/05/2011, à 20:48

Rolinh

Re : /* Topic des codeurs couche-tard [4] */

Bon app'

Pylade a écrit :

(je veux réussir tongue).

tongue tout pareil (fondamentalement, mon pote se contente de ma première version ^^)

EDIT: arf, je tente une regex sur le mv mais je sèche un peu

EDIT2: il me semble que ta regex sur le grep du tomove ne va pas. De plus, je ne vois pas pourquoi faire une boucle pour le mv alors que l'on peut lui passer plusieurs fichiers à déplacer en une fois. Enfin, je dis ça mais en même temps je n'arrive pas à pondre une solution clean.

Dernière modification par Rolinh (Le 16/05/2011, à 21:48)

Hors ligne

#1965 Le 16/05/2011, à 22:32

Pylades

Re : /* Topic des codeurs couche-tard [4] */

On boucle parce que c’est la seule solution pour bien gérer les noms de fichier avec espace… Sinon, soit tu découpes les noms avec espace, soit tu colles les différents noms…


(Enfin, c’est la seule solution à ma connaissance ; je ne suis pas une bête de bash non plus…)

Dernière modification par Pylade (Le 16/05/2011, à 22:33)


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#1966 Le 16/05/2011, à 23:07

Rolinh

Re : /* Topic des codeurs couche-tard [4] */

Mais si on utilise un joker (*), on s'en fiche des espaces dans le nom. On cherche juste des fichiers du genre:
*_$curdir.*
$curdir_*
*_$curdir_*

Enfin... il me semble. Mon soucis étant surtout de ne pas mettre les fichiers 1234_hghg.jpg et 12345_jj.xml dans le même dossier (c'est à dire un fichier dont dans le nom il y a une sous-chaine pouvant potentiellement correspondre à une autre ID).

Hors ligne

#1967 Le 16/05/2011, à 23:07

The Uploader

Re : /* Topic des codeurs couche-tard [4] */

pRoRp


- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10

Hors ligne

#1969 Le 16/05/2011, à 23:41

The Uploader

Re : /* Topic des codeurs couche-tard [4] */

Nan, plutôt un mix entre plop et RoR. tongue

Dernière modification par The Uploader (Le 16/05/2011, à 23:41)


- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10

Hors ligne

#1970 Le 17/05/2011, à 00:01

cm-t

Re : /* Topic des codeurs couche-tard [4] */

'Nuit;


Actu Ubuntu            ☺/
Pauses Ubuntu sur Paris            \_< -t
[(π)] La Quadrature du net

Hors ligne

#1971 Le 17/05/2011, à 00:02

Rolinh

Re : /* Topic des codeurs couche-tard [4] */

@The Uploader: tiens, un truc qui pourrait te plaire (ça devrait être intégré dans Xfce 4.10): xfwm4-tiling

Hors ligne

#1972 Le 17/05/2011, à 00:18

Pylades

Re : /* Topic des codeurs couche-tard [4] */

Ça marche et c’est sûr ; mais je ne suis pas convaincu que ça soit élégant ni rapide… hmm

#!/bin/bash
# This script creates folders in which to move files according to their
# ID given in their filename as in, for example, 12345_bob_marley_london.mov
# 12345 would be the ID

regex='\(^\|_\)ID\(_.*\)\?\(\.mov$\|\.jpg$\|\.xml$\)'

gen_id()
{
    while read file
    do
        if grep -q '\(^\|_\)[[:digit:]]\+\(_.*\)\?\(\.mov$\|\.jpg$\|\.xml$\)' <<< $(basename "$file")
        then
            sed 's/\(^\|^.*_\)\([[:digit:]]\+\)\(_.*\)\?\(\.mov$\|\.jpg$\|\.xml$\)/\2/' <<< $(basename "$file")
        fi
    done < <(find -maxdepth 2)
}

echo 'Yay, I will clean YOUR mess...'
echo 'Moving files:'
while read id; do
    test -d $id || mkdir $id
    while read tomove; do
        basename $tomove | grep -q ${regex/ID/$id} &&
        mv -v "$tomove" $id 2>/dev/null
    done < <(find -maxdepth 2)
done < <(gen_id | sort -n | uniq)
find . -type d -empty -exec rmdir {} \;
echo 'Hurray, everything has been sorted out!'

“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#1973 Le 17/05/2011, à 00:30

tshirtman

Hors ligne

#1974 Le 17/05/2011, à 00:31

Rolinh

Re : /* Topic des codeurs couche-tard [4] */

Ah, en tout cas, ça change!
Mais effectivement, je ne suis pas convaincu que cela soit plus efficace (il y a un poil de redondance (je pense au find)).

Je retenterais un truc demain wink

Bn;

Hors ligne

#1975 Le 17/05/2011, à 00:34

Sir Na Kraïou

Re : /* Topic des codeurs couche-tard [4] */

.


Descendant de Charlemagne et de LUCA.
Bleu, en l'hommage d'un truc bleu. :'(
C'est pas du bleu.
C'est pas le lac de Genève, c'est le Lac Léman.

Hors ligne