7 votes

Comment puis-je fusionner plusieurs répertoires en un seul ?

J'ai plusieurs fichiers dans plusieurs dossiers sous un même répertoire qui doivent se trouver dans un seul dossier. Existe-t-il une ligne de commande qui puisse m'aider à accomplir cette tâche ?

14voto

ieplugin Points 216

Utilisation de find + xargs + mv :

find . -type f -print0 | xargs -0 -I file mv --backup=numbered file .

Ceci déplacera tous les fichiers du répertoire de travail actuel et de ses sous-répertoires (de manière récursive) dans le répertoire de travail actuel, en numérotant numériquement les fichiers ayant le même nom de fichier afin d'éviter les écrasements de fichiers ayant le même nom de fichier.

Exemple de résultat sur un tmp avec un 1 , 2 y 3 des sous-dossiers contenant chacun un 1.ext , 2.ext y 3.ext fichier :

ubuntu@ubuntu:~/tmp$ tree
.
 1
    1.ext
    2.ext
    3.ext
 2
    1.ext
    2.ext
    3.ext
 3
     1.ext
     2.ext
     3.ext

3 directories, 9 files
ubuntu@ubuntu:~/tmp$ find . -type f -print0 | xargs -0 -I file mv --backup=numbered file .
ubuntu@ubuntu:~/tmp$ tree
.
 1
 1.ext
 1.ext.~1~
 1.ext.~2~
 2
 2.ext
 2.ext.~1~
 2.ext.~2~
 3
 3.ext
 3.ext.~1~
 3.ext.~2~

3 directories, 9 files

3voto

Mong H. Ng Points 131

Si la structure de votre répertoire ressemble à

dir root

  • dir A
    • fichier a
    • fichier b
  • dir B
    • fichier c
    • fichier d

et ainsi de suite

vous pouvez faire un simple

mv **/* .

pour déplacer tous les fichiers de profondeur 1 vers le répertoire racine. Simple et élégant !

0voto

heemayl Points 85741

Vous pouvez le faire en utilisant find :

find . -type f -exec mv -i -t new_dir {} +

Dans un premier temps, créez le répertoire ( mkdir new_dir ) où vous voulez déplacer tous les fichiers, ici nous déplaçons tous les fichiers dans le répertoire ./new_dir répertoire.

  • find . -type f trouvera tous les fichiers sous tous les répertoires sous le répertoire courant, donc vous devez cd dans le répertoire qui contient tous les sous-répertoires ou vous pouvez utiliser le chemin absolu, par ex. ~/foo/bar

  • En -exec prédicat de find exécutera le mv qui déplacera tous les fichiers trouvés vers le répertoire new_dir répertoire. Une fois encore, vous pouvez utiliser le chemin absolu.

  • mv -i vous demandera avant d'écraser un fichier.

Si le nouveau répertoire est situé ailleurs, utilisez les chemins absolus :

find ~/path/to/dir -type f -exec mv -i -t ~/path/to/new_dir {} +

0voto

Maythux Points 77506

Vous pouvez utiliser la commande :

find . -type f -execdir mv '{}' /parent-dir \;

man find

 -execdir utility [argument ...] ;
     The -execdir primary is identical to the -exec primary with the exception that 
     utility will be executed from the directory that holds the current
     file.  The filename substituted for the string ``{}'' is not qualified.

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