44 votes

Copiez tous les fichiers correspondant au motif du répertoire et des sous-répertoires dans un seul répertoire

Si je voulais copier tous les fichiers *.so de src vers dst, je ferais :

cp src/*.so dst

Cependant, je veux copier tous les fichiers *.so de src et de sous-répertoires dans dst. Des idées ?

51voto

Dom Points 161

Essayer :

trouver src/ -type f | grep -i so$ | xargs -i cp {} dst

22voto

Sean Cavanagh Points 1156

Si vous utilisez Bash, vous pouvez activer l'option de shell globstar pour faire correspondre des fichiers et des répertoires de manière récursive :

shopt -s globstar
cp src/**/*.so dst

Si vous avez besoin de trouver des fichiers dont les noms commencent par ., et/ou des fichiers dans des répertoires dont les noms commencent par ., activez également l'option dotglob (par exemple, avec shopt -s dotglob). Vous pouvez les définir tous les deux en une seule commande :

shopt -s globstar dotglob

11voto

Ilya Druker Points 111

J'ai essayé la commande suggérée par Mike :

find src/ -type f | grep -i so$ | xargs -i cp {} dst

mais cela a abouti à jeter tous les fichiers dans le répertoire dst avec leurs chemins relatifs perdus.

Pour conserver les chemins relatifs, la commande doit être modifiée comme ceci :

find src/ -type f | grep -i so$ | xargs -i cp {} dst/{}

6voto

Kyriakos Points 161

Une autre façon de faire cela est ainsi :

find src/ -type f -name "*.so" -exec cp {} dst/ \;

1voto

Th. Thielemann Points 141

Le grep peut être remplacé en utilisant l'option -name de find :

find src/ -type f -name "*.so" | xargs -i cp {} dst/{}

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