Effacer des fichiers en fonction de leur taille + fonction du nom (linux)
Répondre à la discussion
Affichage des résultats 1 à 16 sur 16

Effacer des fichiers en fonction de leur taille + fonction du nom (linux)



  1. #1
    Forthman

    Effacer des fichiers en fonction de leur taille + fonction du nom (linux)


    ------

    Bonjour,

    Pour surveiller l'accès à mon atelier, j'ai installé une caméra (une webcam en fait), et j'utilise motion pour détecter les mouvements
    et enregistrer photos et vidéos.
    motion génère deux types de fichiers :
    - des fichiers images nnn-date-xx.jpg ( nnn=numéro d'enregistrement, xx et le numéro de la photo)
    - des fichiers vidéos nnn-date.avi qui sont simplement les photos mises à la suites avec une moins bonne qualité

    Le système fonctionne plutôt bien, mais les mouvements des voitures au loin déclenchent l'enregistrement.
    Du coup je me retrouve avec plus de 400 enregistrements par jour, alors qu'il n'y en a que 2 ou 3 qui sont vraiment pertinents.

    J'ai remarqué que pour qu'un enregistrement soit utile, il faut qu'il fasse plus de 600Ko pour une vidéo.
    aujourd'hui j'efface à la main les fichiers vidéo <600Ko (j'affiche par taille, ça va assez vite) mais il me reste les photos, et là je n'ai
    pas d'autre solution que de le faire au cas par cas

    Ma question est donc : serait-il possible de faire un script qui permettrait de repérer les fichiers nnn-date.avi <600Ko, et d'effacer tous les fichiers
    nnn-*.* (pour effacer les vidéos et les images)

    merci de votre aide.

    -----

  2. #2
    pm42

    Re : Effacer des fichiers en fonction de leur taille + fonction du nom (linux)

    Essaie un truc du genre :

    find <repertoire> -name 'nnn-*.avi' -size -600k

    pour voir si ça te trouve ce que tu veux.

    Si oui, essaie :

    find <repertoire> -name 'nnn-*.avi' -size -600k -exec rm -f {} \;

  3. #3
    Evil.Saien

    Re : Effacer des fichiers en fonction de leur taille + fonction du nom (linux)

    Citation Envoyé par pm42 Voir le message
    find <repertoire> -name 'nnn-*.avi' -size -600k -exec rm -f {} \;
    Une belle commande bash comme je les aime
    Mon psychiatre, pour quinze mille francs, il m'a débarrassé de ce que j'avais : quinze mille francs

  4. #4
    pm42

    Re : Effacer des fichiers en fonction de leur taille + fonction du nom (linux)

    Citation Envoyé par Evil.Saien Voir le message
    Une belle commande bash comme je les aime
    Ca manque de pipe, backquote, perl et autres pour être vraiment sexy

  5. A voir en vidéo sur Futura
  6. #5
    Forthman

    Re : Effacer des fichiers en fonction de leur taille + fonction du nom (linux)

    Merci pm42 pour ta réponse.

    les "nnn" dans les noms de mes fichiers sont un numéro incrémenté à chaque prise.
    J'ai donc remplacé ta ligne par : find <repertoire> -name '*.avi' -size -600k
    pour que ça m'affiche bien les fichiers vidéo <600k, cette partie fonctionne parfaitement.
    Par contre, je dois aussi effacer les fichiers jpg correspondants.

    Petit correctif, qui n'est pas très importante (je pense), ce n'est pas la date mais l'heure qui est codée dans le nom du fichier, suivi du numéro de prise

    Un petit exemple :
    J'ai un fichier vidéo nommé : 421-130921.avi ( enregistrement 421 à débuté à 13h09,21s
    il est composé des 4 images suivantes (2 prises par seconde)
    421-130921-01.jpg (photo 01 prise à 13h09,21s)
    421-130921-02.jpg (photo 02 prise à 13h09,21s)
    421-130922-01.jpg (photo 01 prise à 13h09,22s)
    421-130922-02.jpg (photo 02 prise à 13h09,22s)

    Le plus compliqué pour moi c'est qu'il faut récupérer le début du nom de fichier (avant le premier tiret) et effacer tous les fichiers
    (avi et jpg) commençant par ces caractères.

    toujours dans mon exemple, ça reviendrait à :
    chercher tous les fichiers *.avi -600k
    récupérer ces noms
    effacer tous les fichiers nommés "nnn-*.*"

  7. #6
    Evil.Saien

    Re : Effacer des fichiers en fonction de leur taille + fonction du nom (linux)

    Essaie ceci
    Code:
    for A in `find <repertoire> -name '*.avi' -size -600k`
    do
          echo ${A%.avi}
    done
    Mon psychiatre, pour quinze mille francs, il m'a débarrassé de ce que j'avais : quinze mille francs

  8. #7
    pm42

    Re : Effacer des fichiers en fonction de leur taille + fonction du nom (linux)

    for i in `find <repertoire> -name '*.avi' -size -600k `; do rm $i; rm `echo $i | sed -e 's/.avi$/.jpg/'`; done

    Edit: croisé avec Evil.Saien.

  9. #8
    Ludwig1

    Re : Effacer des fichiers en fonction de leur taille + fonction du nom (linux)

    Citation Envoyé par Forthman Voir le message
    Bonjour,

    Pour surveiller l'accès à mon atelier, j'ai installé une caméra (une webcam en fait), et j'utilise motion pour détecter les mouvements
    et enregistrer photos et vidéos.
    motion génère deux types de fichiers :
    - des fichiers images nnn-date-xx.jpg ( nnn=numéro d'enregistrement, xx et le numéro de la photo)
    - des fichiers vidéos nnn-date.avi qui sont simplement les photos mises à la suites avec une moins bonne qualité

    Le système fonctionne plutôt bien, mais les mouvements des voitures au loin déclenchent l'enregistrement.
    Du coup je me retrouve avec plus de 400 enregistrements par jour, alors qu'il n'y en a que 2 ou 3 qui sont vraiment pertinents.

    J'ai remarqué que pour qu'un enregistrement soit utile, il faut qu'il fasse plus de 600Ko pour une vidéo.
    aujourd'hui j'efface à la main les fichiers vidéo <600Ko (j'affiche par taille, ça va assez vite) mais il me reste les photos, et là je n'ai
    pas d'autre solution que de le faire au cas par cas

    Ma question est donc : serait-il possible de faire un script qui permettrait de repérer les fichiers nnn-date.avi <600Ko, et d'effacer tous les fichiers
    nnn-*.* (pour effacer les vidéos et les images)

    merci de votre aide.
    Salut,

    Au vu de nos discussions passées, je dois dire que tu me surprends un peu avec ta question.

    Si tu travailles avec la machine comme t'as dis, tu devrais en principe disposer de tous ça.

    : CREATE-FILE ( c-addr u fam -- fileid ior )

    : OPEN-FILE ( c-addr u fam -- fileid ior )

    : CLOSE-FILE ( fileid -- ior )

    : DELETE-FILE ( caddr n -- ior )

    : RENAME-FILE ( caddr1 u1 caddr2 u2 -- ior )

    : COPY-FILE ( caddr1 u1 caddr2 u2 -- ior )

    : COPY-REPLACE-FILE ( caddr1 u1 caddr2 u2 -- ior )

    : READ-FILE ( c-addr u1 fileid -- u2 ior )

    : WRITE-FILE ( c-addr u fileid -- ior )

    : FLUSH-FILE ( fileid -- ior )

    : FILE-SIZE ( fileid -- udsize ior )

    : SEEK-FILE ( ud mode fileid -- ior )

    : FILE-POSITION ( fileid -- ud ior )

    : REPOSITION-FILE ( ud fileid -- ior )

    : RESIZE-FILE ( ud fileid -- ior )

    : FILE-STATUS ( caddr u -- x ior )

    : FILE-EXISTS ( caddr u -- flag )

    : REWIND-FILE ( fid -- ior )

    : END-OF-FILE ( fid -- ior )

    : APPEND-FILE ( a u -- fid ior )

    : -NAME ( a n -- a n )

    : -EXT ( a n -- a n )

    : -PATH ( a n -- a n )

    : THIS-EXE-NAME ( -- addr n )

    : -ROOT ( zstr -- addr len )

    : +ROOT ( addr n -- addr n )

    : FULLNAME ( addr n zbuf -- )

    : DEFAULT.EXT ( caddr n -- caddr' n' )

    ETC... ETC... ETC...


    Cordialement

    Ludwig

  10. #9
    Forthman

    Re : Effacer des fichiers en fonction de leur taille + fonction du nom (linux)

    merci à vous deux,
    ça fonctionne presque, j'ai regardé les docs pour comprendre ce qu'il manque pour que ce soit opérationnel.
    donc sed avec l'option s/ remplace une partie de chaine par une autre.

    J'ai ajouté un "*" pour éliminer les numéros d'images

    for i in `find <repertoire> -name '*.avi' -size -600k `; do rm $i; rm `echo $i | sed -e 's/.avi$/*.jpg/'`; done

    par contre, comme le nom des images peut s'étaler sur plusieurs secondes, il faudrait que les 3 derniers caractères avant .avi ne soient pas pris en compte..
    Je peux le faire avec "???.avi$" ?

  11. #10
    pm42

    Re : Effacer des fichiers en fonction de leur taille + fonction du nom (linux)

    Pour sed, il faut que tu creuses dans la doc. Ma connaissance se ramène à faire la substitution indiquée.
    Sinon, je passe en perl avec des expressions régulières qui mémorisent des blocs, etc.

  12. #11
    Evil.Saien

    Re : Effacer des fichiers en fonction de leur taille + fonction du nom (linux)

    Si tu préfères, tu peux garder les N premiers caractères.

    Code:
    for A in `find <repertoire> -name '*.avi' -size -600k`
    do
          echo ${A:0:5}
    done
    Mon psychiatre, pour quinze mille francs, il m'a débarrassé de ce que j'avais : quinze mille francs

  13. #12
    Forthman

    Re : Effacer des fichiers en fonction de leur taille + fonction du nom (linux)

    Super ça fonctionne nickel !
    J'ai fait un mélange entre les proposition de PM42 et Evil-Saien
    Code:
    for i in `find <repertoire> -name '*.avi' -size -600k`
    do
    rm -f echo ${i:0:27}+"*.*"
    done
    Pour répondre à Ludwig1, effectivement c'était le "plan B", mais je n'avais pas envie de pondre un programme
    si 3 lignes de shell pouvaient faire l'affaire

    merci encore à pm42 et Evil-Saien

  14. #13
    Ludwig1

    Re : Effacer des fichiers en fonction de leur taille + fonction du nom (linux)

    Citation Envoyé par Forthman Voir le message
    Super ça fonctionne nickel !
    J'ai fait un mélange entre les proposition de PM42 et Evil-Saien
    Code:
    for i in `find <repertoire> -name '*.avi' -size -600k`
    do
    rm -f echo ${i:0:27}+"*.*"
    done
    Pour répondre à Ludwig1, effectivement c'était le "plan B", mais je n'avais pas envie de pondre un programme
    si 3 lignes de shell pouvaient faire l'affaire

    merci encore à pm42 et Evil-Saien
    Re,

    ben t'as aussi le Shell

    S" bla bla bla ..." >SHELL

    Exemple:

    : Futura S" http://forums.futura-sciences.com/programmation-langages-algorithmique/" >SHELL ;

    Bon l'essentiel c'est que ça marche

    Cordialement

    Ludwig

  15. #14
    Forthman

    Re : Effacer des fichiers en fonction de leur taille + fonction du nom (linux)

    T'es sérieux là ?

  16. #15
    Ludwig1

    Re : Effacer des fichiers en fonction de leur taille + fonction du nom (linux)

    Citation Envoyé par Forthman Voir le message
    T'es sérieux là ?
    salut
    A ton avis ?


    Cordialement
    Ludwig

  17. #16
    redrum13

    Re : Effacer des fichiers en fonction de leur taille + fonction du nom (linux)

    Citation Envoyé par pm42 Voir le message
    Ca manque de pipe, backquote, perl et autres pour être vraiment sexy
    Non, c'est atomique, donc sexy .

Discussions similaires

  1. graphique de fonction et leur dérivé
    Par latitude800 dans le forum Mathématiques du collège et du lycée
    Réponses: 4
    Dernier message: 21/02/2012, 15h13
  2. Positionnement planètes en fonction de leur taille.
    Par dragounet dans le forum Planètes et Exobiologie
    Réponses: 2
    Dernier message: 30/10/2011, 09h51
  3. Réponses: 0
    Dernier message: 27/01/2010, 09h07
  4. Programme pour rangement de point en fonction de leur distance sous Matlab?
    Par inviteece56b35 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 13/07/2009, 17h09
  5. les différentes aires de la vison et leur fonction
    Par invitefd70b241 dans le forum TPE / TIPE et autres travaux
    Réponses: 0
    Dernier message: 23/01/2008, 19h42