• # Doublons ?

    Posté par (page perso) . Évalué à 8.

    Si le fichier A est plus gros que le fichier B, comment est-ce que A est un doublon de B ? Ces fichiers ne peuvent pas être identitiques s'ils n'ont pas la même taille !

    • [^] # Re: Doublons ?

      Posté par . Évalué à 4.

      meme question qu'Aragorn, un doublon par definition ce sont deux fichiers identiques
      - meme nom
      - meme date
      - meme contenu
      => meme taille

      pour le verifier, tu peux comparer leur md5 dans une ligne de commande
      md5sum lefichierA

      fdshfds7352fsdj2392
      md5sum lefichierB
      fdshfds7352fsdj2392

      si les md5 sont identiques, alors on peut considerer que ce sont des doublons (meme contenu)

      si les md5 differents, alors le contenu differe, donc ce ne sont pas des doublons.

      • [^] # Re: Doublons ?

        Posté par (page perso) . Évalué à 5.

        pour le verifier, tu peux comparer leur md5 dans une ligne de commande

        Non, ce n'est pas une bonne méthode pour comparer deux fichiers. Le mieux est d'utiliser la commande cmp.

        Le MD5 (ou un autre hachage) est utile pour trouver les doublons dans une grosse collection.

      • [^] # Re: Doublons ?

        Posté par . Évalué à 1.

        J'aurais dû donner plus de détails sur ce que je veux faire exactement.

        J'ai un répertoire de 33G de mp3 enregistrés avec streamripper. Voilà à quoi ressemble son contenu :

        Zen Mechanics——Mecha.mp3
        Zen Mechanics——Modified (1).mp3
        Zen Mechanics——Modified - Album- Holy Cities (1).mp3
        Zen Mechanics——Modified - Album- Holy Cities (2).mp3
        Zen Mechanics——Modified - Album- Holy Cities (3).mp3
        Zen Mechanics——Modified - Album- Holy Cities (4).mp3
        Zen Mechanics——Modified - Album- Holy Cities (5).mp3
        Zen Mechanics——Modified - Album- Holy Cities (6).mp3
        Zen Mechanics——Modified - Album- Holy Cities.mp3
        Zen Mechanics——Modified.mp3
        Ziki Vs Ananda Shake——High Damage - Album- V-A- - Goa Trance vol- 7.mp3
        Ziki Vs Sesto Sento——Trance 'N' Roll - Album- V-A- - Goa Trance vol- 7.mp3
        Ziki Vs- XI——Mental Model - Album- Goa 2008 Vol- 1.mp3
        Zion Vs Zion Linguist——Babel (1).mp3
        Zion Vs Zion Linguist——Babel - Album- V-A- - Release N Attack (1).mp3
        Zion Vs Zion Linguist——Babel - Album- V-A- - Release N Attack.mp3
        Zion Vs Zion Linguist——Babel.mp3
        Zybex & Ovnimoon——Universe (1).mp3
        Zybex & Ovnimoon——Universe.mp3
        Zybex——Purple Waves - Album- V-A- - Psydance (1).mp3
        Zybex——Purple Waves - Album- V-A- - Psydance.mp3
        Zybex——Saico Psybex - Album- V-A- - Goa Moon Vol- 1 (1).mp3
        Zybex——Saico Psybex - Album- V-A- - Goa Moon Vol- 1 (2).mp3
        Zybex——Saico Psybex - Album- V-A- - Goa Moon Vol- 1 (3).mp3
        Zybex——Saico Psybex - Album- V-A- - Goa Moon Vol- 1.mp3

        J'aimerais supprimer les doublons. Mais comme « ls |wc -l » me répond 4193, je peux pas le faire à la main.

        Sachant que c'est streamripper qui a découpé les morceaux automatiquement, en se basant sur le changement de tags dans le stream. Il peut donc avoir couper un peu avant le début ou la fin du morceau. Les doublons ont le même nom de fichier, mis à part (X) à la fin, et font tous à peu près la même taille. Je souhaite ne garder que le plus gros pour chaque morceau.

        • [^] # Re: Doublons ?

          Posté par . Évalué à 3.

          alors tu n'as plus qu'a scripter
          car seul toi peux dire quel fichier garder quand il y en a plusieurs.

          • [^] # Re: Doublons ?

            Posté par . Évalué à 1.

            car seul toi peux dire quel fichier garder quand il y en a plusieurs.

            Hum pourtant il y a le critère « choisir le plus gros » qui me semblait un besoin pas si inusuel que ça.

            De toutes il semblerait que ça soit l'occasion pour moi de me mettre à Ruby… ;-)

  • # fdupes & co

    Posté par (page perso) . Évalué à 5.

    http://en.wikipedia.org/wiki/Fdupes

    pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

    • [^] # Re: fdupes & co

      Posté par . Évalué à 1.

      Merci pour ta réponse (et des personnes au-dessus aussi, au passage :), je vais regarder ça.

      • [^] # Re: fdupes & co

        Posté par (page perso) . Évalué à 2.

        Ne marche que pour les fichiers identique, genre un pdf téléchargé 2 fois mais déplacé a 2 endroits différents

  • # Égalité

    Posté par . Évalué à 2.

    Il faut que vous définissiez mieux l'"égalité" de fichiers. Comme les autres commentaires le montrent, on entend habituellement par égalité de deux fichiers le fait qu'il soit strictement identiques octet-à-octet (ce qui signifie qu'ils doivent avoir la même taille).
    De ce que je comprends, vous avez des fichiers qui ont un contenu "équivalent" à vos yeux (globalement, la forme d'onde de certains fichiers mp3 est très similaire, ou bien leur ID3 est identique), mais certains ont plus de valeur que d'autres (encodage différent, meilleure qualité, préférable).
    Il faudrait donc un script qui liste tous les ID3 possibles, qui groupent plusieurs fichiers mp3 ensemble s'ils ont le même ID3, puis pour chaque ID3, il ne garde que le fichier qui indique le meilleur encodage (ou le plus volumineux) du groupe.

  • # I'm bored

    Posté par . Évalué à 2.

    Vu que je m'ennuyais, j'ai fait un petit script ruby.
    Le script assume que les noms des fichiers dupliqués finissent par '(<chiffre>).<extension>'.
    Ça va copier les fichiers dans un nouveau dossier (nommé par défaut 'tmp') sans touché aux fichiers d'origine.

    SOURCE = ARGV[0] || Dir.pwd
    DEST = File.join(SOURCE, ARGV[1] || '/tmp/')
    FILES = Dir[SOURCE + '/*']
    RE = Regexp.compile '^(.*?)(\(\d\))?$'
    
    if File.exists(DEST)
      puts "#{DEST} already exists. Exiting."
    else
      `mkdir #{DEST}`
    end
    
    def rootname(f)
      ext = File.extname(f)
      basename = File.basename(f, ext)
      basename.match(RE)[1].chomp(" ") + ext
    end
    
    FILES.group_by { |f| rootname f }
    .map do |name,files|
      f = files.sort_by {|f| File.size(f) }[0]
      File.rename(f, DEST+name)
    end
    

    Ça s'utilise comme ça:

    ruby /chemin/du/script.rb /chemin/du/dossier/contenant/les/fichiers/à/renommer/
    

    ou
    ruby /chemin/du/script.rb /chemin/du/dossier/contenant/les/fichiers/a/renommer/ /chemin/du/dossier/cible/
    
    • [^] # Re: I'm bored

      Posté par . Évalué à 2.

      Merci beaucoup pour ton aide :)

      Perso je ne connais pas ruby, juste un tout petit peu python. Quand je lance ton script, ruby me répond :

      % ruby1.8 tri. philessai
      tri.rb:19: syntax error, unexpected '.', expecting $end
      .map do |name,files|
      ^

      J'ai essayé de comprendre, mais j'ai du mal à voir où est l'erreur puisque je parle pas le ruby ;)

      • [^] # Re: I'm bored

        Posté par . Évalué à 2.

        C'est bizarre, "chezmoiçamarche" mais j'utilise ruby1.9 alors que ta version est la 1.8. Peut-etre que ça vient de là.

        Sinon, il faut joindre la ligne où apparait l'erreur avec la ligne précédente. Comme ça:

        FILES.group_by { |f| rootname f }.map do |name,files|
        

        et ça devrait marcher.

        • [^] # Re: I'm bored

          Posté par . Évalué à 1.

          Ça marche en effet :) Encore merci.
          Maintenant je vais regarder pour adapter le script, parce que j'ai certains fichiers qui sont encore en double, y'a une version avec Album dans le nom de fichier.

          Juste pour info, j'avais ce message d'erreur :
          "undefined method exists for File:Class (NoMethodError)"
          En googlant j'ai vu que des gens avaient le même soucis mais avec exists? :
          http://www.google.fr/search?num=20&hl=fr&lr=lang_en|lang_fr&safe=off&tbs=lr%3Alang_1en|lang_1fr&q="undefined+method+exists+for+File%3AClass+(NoMethodError)"&aq=f&aqi=&aql=&oq=
          Donc j'ai rajouté un ? et ça a marché.

          • [^] # Re: I'm bored

            Posté par . Évalué à 2.

            Arf, oui, c'est une erreur de ma part /o\

            En ruby, c'est une convention de mettre un point d'interrogation au nom des méthodes qui renvoient un booléen (et un point d'exclamation aux méthodes qui modifient leur receveur) et toutes les méthodes de la librairie standard suivent cette convention (enfin presque toutes pour le point d'interrogation).

            Et pour l'excuse, c'est qu'en fait j'ai rajouté ce test au moment de la publication donc il n'a pas était testé. Ça m'apprendra.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.