web-dev-qa-db-fra.com

Comment fusionner plusieurs répertoires en un seul

J'ai plusieurs fichiers dans plusieurs dossiers dans un répertoire qui doivent être dans un dossier. Existe-t-il une ligne de commande qui puisse m'aider à accomplir cela?

2
Junior Cortez

Utilisation de find + xargs + mv:

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

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

Exemple de résultat sur un dossier tmp avec un sous-dossier 1, 2 et 3 contenant chacun un 1.ext, 2.ext et 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
3
kos

Si votre structure de répertoire ressemble à

dir root

  • dir A
    • déposer un
    • fichier b
  • dir B
    • fichier c
    • fichier d

etc

vous pouvez faire un simple

mv **/* .

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

1
Mong H. Ng

Vous pouvez le faire en utilisant find:

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

Commencez par créer le répertoire (mkdir new_dir) dans lequel vous souhaitez déplacer tous les fichiers. Ici, nous déplaçons tous les fichiers du répertoire ./new_dir.

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

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

  • mv -i vous demandera de remplacer un fichier.

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

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

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.
0
Maythux