web-dev-qa-db-fra.com

Comment puis-je copier des fichiers avec des noms communs et les coller dans un autre dossier?

J'aimerais savoir comment copier des fichiers portant des noms communs et les coller dans un autre dossier.

Par exemple, j'ai des dossiers f1, f2, f3 ... f50. Dans chaque dossier, il y a des fichiers nommés a #, b #, c # ... z #. # est une sorte de nombre aléatoire et ils sont différents dans f1, f2, f3 ... f50.

J'aimerais copier, par exemple, a fichiers de tous les 50 dossiers f et les coller dans un nouveau dossier.

Pourriez-vous m'aider à le faire?

5
Arnold

Je suppose que vous voulez dire que vous avez une structure du genre:

├── f1
│   ├── a1
│   ├── a2
│   ├── b1
│   ├── b2
│   ├── c1
│   ├── c2
├── f2
│   ├── a3
│   ├── a4
│   ├── b3
│   ├── b4
│   ├── c3
│   ├── c4

et vous voulez vous retrouver avec un répertoire comme celui-ci:

a-files
├── a1
├── a2
├── a3
└── a4

En supposant:

  • le répertoire de travail actuel est le répertoire parent de tous les répertoires f1 f2 f3

Vous pourriez faire:

mkdir a-files
for files in f*/a* ; do cp "$files" a-files ; done

copier tous les fichiers commençant par a vers un nouveau répertoire a-files à partir de tous les répertoires commençant par f. Vous pouvez répéter pour les fichiers commençant par b ...

mkdir b-files
for files in f*/b* ; do cp "$files" b-files ; done

Remarque: s'il existe des noms de fichiers en double, chaque fichier écrit dans le nouveau répertoire en écrasera un autre portant le même nom. Ainsi, à la fin de la boucle, le nouveau répertoire ne contiendra qu'une copie du dernier fichier écrit avec ce nom. . Vous pouvez utiliser le drapeau -n pour cp afin d’empêcher le remplacement, puis vous obtiendrez le premier fichier portant ce nom au lieu du dernier:

for files in f*/a* ; do cp -n "$files" a-files ; done
8
Zanna