4 votes

Comment fusionner un grand nombre de dossiers en un seul ?

J'ai un grand nombre de dossiers que je dois fusionner. Je sais que si je fais glisser le contenu de tous ces dossiers sur un autre, je peux les fusionner. Mais avec autant de dossiers, cela va me prendre des heures.

Donc, j'ai besoin d'un moyen de fusionner tous les dossiers à l'intérieur d'un répertoire, avec un bash script, ou un programme qui fait cela.

EDIT En plus, j'aimerais que la structure des dossiers soit préservée et que dans tous les dossiers il y ait des dossiers avec les mêmes noms. Ces dossiers doivent être fusionnés.

2voto

John Meagher Points 6734

Je suggère de faire une recherche dans le dossier parent pour . et inclure tous les sous-dossiers. Cela vous permettra de sélectionner tous les fichiers, puis de les déplacer dans un autre dossier. Tous les contenus seront alors fusionnés dans le nouveau dossier.

1voto

Sean Sexton Points 973

Si c'est votre structure de dossier ...

fol1
| `-subfolA
| | `-one.txt
| `-subfolB
|   `-two.txt
fol2
 `-subfolA
  | `-een.txt
  `-subfolB
    `-twee.txt

... et tu veux...

fol1
| `-subfolA
| | `-een.txt
| | `-one.txt
| `-subfolB
|   `-twee.txt
|   `-two.txt
fol2

... alors vous pouvez :

  1. Allez dans fol1 ;
  2. touchez Ctrl-A pour sélectionner tous les sous-dossiers ;
  3. les faire glisser dans folB . Nautilus verra qu'il existe déjà un fichier subfolA etc., et vous demandera si vous voulez fusionner [celui-ci/tous] automatiquement.

Ou vous pouvez ouvrir le terminal et

cd path/to/fol1
cp -r ../fol2/* ./

Ça s'automatise aussi. Explication élaborée, juste au cas où un novice en bash rencontrerait cette réponse :

  • cd change de répertoire.
  • cp des copies ; le premier dossier est la source, le second la destination.
  • -r signifie descendre dans les sous-dossiers ('recurse').
  • ../fol2/* signifie one directory up / into fol2 / all files and folders you can find there .
  • ./ est le répertoire courant.

0voto

ste_kwr Points 10540

Le script Python suivant devrait faire ce que vous voulez. Copiez simplement son contenu dans un fichier (nommé sc1.py ) dans le dossier qui contient tous les sous-dossiers que vous voulez fusionner. Exécutez ensuite la commande chmod +x sc1.py et ensuite exécuter ce fichier dans ce dossier ./sc1.py et vous devriez obtenir le résultat. Ce que ce script va faire est le suivant :

Disons que vous travaillez dans le dossier /home/bob/foo et vous avez des centaines de dossiers bar1 , bar2 ,...., bar99 dans le dossier foo .

Exécuter le script en /home/bob/foo/ et il créera un dossier /home/bob/foo/Merged et il transférera le contenu de tous les dossiers bar1 , bar2 etc... à l'intérieur du dossier Merged . Le répertoire se structure à l'intérieur des dossiers bar1 , bar2 etc. resteront intacts

Vous voudrez peut-être tester cela quelque part pour vérifier que c'est bien ce que vous avez demandé.

#!/usr/bin/env python

import subprocess as sbp
import os

path=os.getcwd()
fol = os.listdir(path)
p2 = os.path.join(path,'Merged')

sbp.Popen(['mkdir','Merged'])

for i in fol:
    if os.path.isdir(i)==True:
        if i!='Merged':
            p1 = os.path.join(path,i)
            p3 = 'cp -r "' + p1 +'"/* ' + p2
            sbp.Popen(p3,shell=True)

Note : Je suis un débutant absolu en matière de scripting et je viens d'apprendre la plupart de ces commandes. S'il y a des suggestions d'amélioration de la part des gens autour - grandement apprécié.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X