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 18/10/2013, à 17:44

Frooz

Trie de baucoup de fichiers [Résolu]

Bonjour,
j'ai récupéré des fichiers supprimés mais le programme me les a mis mis en 3900 dossiers pour un total de plus de  300 Go de données.

J'aimerai les trier par type et les dispacher dans des plus petits dossiers car nautilus a du mal à les afficher.
Par le temrinal les commandes comme mv, cp, find , sudo... me disent qu'il y a trop d'arguments ... Quel commande puis je utiliser pour m'éviter de traiter 20 par 20 les dossiers ?

Merci beaucoup.

Dernière modification par Frooz (Le 13/11/2013, à 11:51)

Hors ligne

#2 Le 18/10/2013, à 18:03

MicP

Re : Trie de baucoup de fichiers [Résolu]

J'aimerai en savoir plus:
  combien de types de fichiers différents as-tu ?

Que veux tu dire par "petits dossier ?
  Petits car contenants moins de fichiers ?
  Petits car leur nom est plus court ?

Ce que je crois comprendre (mais je me trompe peut-être, c'est qu'il y a beaucoup trop de fichiers par dossiers et que tu voudrais créer des sous-dossiers pour chaque type de fichier.
Est-ce bien cela ?

Pourrais-tu nous transmettre les commandes ou scripts que tu as utilisé et qui font que : "... disent qu'il y a trop d'arguments ..."

Merci.

Hors ligne

#3 Le 18/10/2013, à 18:42

ssdg

Re : Trie de baucoup de fichiers [Résolu]

je ne serait pas surpris que sur énormément de fichiers, même echo * peut faire planter le bash.

Sinon, essaie de voir le manuel de la commande "find" qui à plein d'options sympa.


s'il n'y a pas de solution, c'est qu'il n'y a pas de problème... ou pas.

Hors ligne

#4 Le 19/10/2013, à 08:45

Hizoka

Re : Trie de baucoup de fichiers [Résolu]

quand il y a trop d'info, il faut piper avec un xargs (voir -h pour plus d'info ou recherche sur le forum il y a pas mal d'exemple).


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#5 Le 19/10/2013, à 10:02

Frooz

Re : Trie de baucoup de fichiers [Résolu]

Bonjour,
merci de vos réponses. J'ai 3000 dossiers qui contiennent chacun plusieurs dizaines de fichiers de types variés: png, jpg, txt, avi, dll, ... Je souhaite en effet récupérer ceux qui m'intéressent (image, vidéos) dans d'autres dossiers par type.

Je vous transmets tout à l'heure un doc avec toutes mes tentatives.

Merci

Hors ligne

#6 Le 19/10/2013, à 15:23

Shanx

Re : Trie de baucoup de fichiers [Résolu]

Salut.

j’ai fais un petit script en python pour t’aider à résoudre ton problème. Son fonctionnement est très simple : il suffit de le lancer en ligne de commande avec en argument le chemin du répertoire à traiter. Ensuite, il se lance récursivement pour récupérer tous les fichiers présents dans les sous-répertoires et les déplacer dans des dossiers nommés selon les extensions. Ensuite, une fois que les déplacements ont été fait, il supprime les répertoires vides. Il gère aussi les doublons (il ajoute (1), (2), etc. à la fin des fichiers qui ont les mêmes noms). J’ai fait quelques tests, il semble bien fonctionner, mais ça risque de prendre pas mal de temps si tu le lances sur 300 Go de données.

Par contre, c’est un script puissant, qui peut faire des dégâts si tu le lances sur le mauvais répertoire. Sois donc attentif avant de le lancer. wink Par ailleurs, je ne peux pas garantir qu’il fonctionne parfaitement (dans le pire des cas, tu peux perdre des fichiers qui étaient dans le répertoire à traiter. Normalement, il n’y a aucun risque pour ton ordinateur).

Le script :

#!/usr/bin/env python
#coding: utf-8

import os
import shutil
import sys

# Vérification des arguments
if (len(sys.argv) != 2):
    sys.exit("Syntaxe: ./script.py '/chemin/vers/repertoire'")
if not os.path.isdir(sys.argv[1]):
    sys.exit("Le chemin demandé n'existe pas")

chemin = sys.argv[1]

# cheminroot = répertoire dans lequel les fichiers sont déplacés
cheminroot = os.path.abspath(os.path.join(chemin, '..'))
cheminroot = os.path.join(cheminroot,'fichiers-trié')

# Fonction pour pouvoir déplacer les doublons : on ajoute (1), (2), etc.
# à la fin des fichiers ayant les mêmes noms
def doublon(dst):
    fileName, fileExtension = os.path.splitext(dst)
    i = 1
    while os.path.isfile(dst):
        fileName += '('+ str(i)+ ')'
        dst = fileName + fileExtension
        i+=1
    return dst

def tri(chemin):
    for f in os.listdir(chemin):
        src = chemin
        src = os.path.join(chemin,f)
        
        # si l'élément considéré est un répertoire non vide, on appelle
        # récursivement la fonction. S'il est vide, on le supprime.
        if os.path.isdir(src):
            if not os.listdir(src):
                os.rmdir(src)
            else:
                tri(src)
        
        # Si l'élément est un fichier, on récupère son extension
        else:
            fileName, fileExtension = os.path.splitext(f)
            fileExtension = fileExtension[1:]
            
            # On créé un répertoire pour y déplacer les fichiers ayant
            # cette extention
            if fileExtension:
                dst = os.path.join(cheminroot,fileExtension)
            else:
                dst = os.path.join(cheminroot,'sansExtension')
            if not os.path.isdir(dst):
                print 'Création de ', dst
                os.makedirs(dst)
                
            # On déplace le fichier avec gestion des doublons
            if not os.path.isfile(dst+'/'+f):
                print 'mv', src, ' ', dst
                shutil.move(src, dst)
            else:
                dst = doublon(dst+'/'+f)
                print 'mv', src, ' ', dst
                shutil.move(src, dst)
 
            # On supprime les répertoires une fois qu’ils sont vides
            parentFolder = os.path.abspath(os.path.join(src, '..'))
            if not os.listdir(parentFolder):
                os.rmdir(parentFolder)

# Premier appel de la fonction
tri(chemin)

Tu peux l’enregistrer dans ton répertoire utilisateur. Si tu l’appelle tri.py, pour le lancer il faut faire ça :

chmod +x tri.py
./try.py "répertoire/à/trier"

Si tu as une question, n’hésite pas. wink

Dernière modification par Shanx (Le 19/10/2013, à 15:26)


Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied

Hors ligne

#7 Le 19/10/2013, à 16:51

MicP

Re : Trie de baucoup de fichiers [Résolu]

@ Shanx : Sympa ton script.

Avec les systèmes de type Unix, je t'invite à utiliser la commande "file" plutôt que de déterminer le type de fichier par son nom d'extension.
Cette commande ne se laissera pas berner par un fichier dont le nom d'extension ne corresponds pas au type réel du fichier car elle n'en tiens pas compte.
La commande "file" détermine le type de fichier en fonction de son contenu.

man file
man magic

EDIT: pour Python : how to check type of files without extensions in python

Dernière modification par MicP (Le 19/10/2013, à 16:59)

Hors ligne

#8 Le 19/10/2013, à 16:55

Frooz

Re : Trie de baucoup de fichiers [Résolu]

salut,
fantastique !! merci beaucoup je viens de le lancer ça à l'air de fonctionner !! je vous tiens au courant puis passerai alors en résolu !!

merci vraiment !

Hors ligne

#9 Le 21/10/2013, à 15:22

Shanx

Re : Trie de baucoup de fichiers [Résolu]

Frooz, alors, ça a fonctionné ? Je serais curieux de savoir s’il n’y a pas eu de souci (et si ça n’a pas pris trop de temps)…

@MicP : ça aurait été se compliquer la tâche assez inutilement je pense… Comme le but est probablement de retrouver des fichiers persos, je pense qu’on pouvait faire confiance aux extensions.
Par contre, j’aurais pu utiliser os.walk() pour naviguer dans l’arborescence en ne sélectionnant à chaque fois que les répertoires ou les fichiers.


Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied

Hors ligne

#10 Le 21/10/2013, à 20:46

MicP

Re : Trie de baucoup de fichiers [Résolu]

Shanx a écrit :

... faire confiance aux extensions ...

Tant que c'est pas ma machine qui va exécuter le script qui tue, ou mes gamins qui vont tomber sur la vidéo qui faut pas, "bien cachée" à la façon windowsienne, .... smile

Shanx a écrit :

... os.walk()  ...

Je suis pas un programmeur, mais pour ce cas, une énumération est de fait nettement moins gourmande en ressources mémoire.
Alors à mon (très humble) avis : Super +1 pour "os.walk()"

Mais je suis pas là pour pinailler non plus, alors du moment que ça fonctionne et que ça le dépanne. smile

Hors ligne