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 ?

0voto

MatteoLacki Points 101

Pour moi,

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

ne copie pas les fichiers .so directement dans src. Cela le fait :

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

ou cela

shopt -s globstar
cp src/{**/*,*}.so dst

Mais cela résout le problème de copier les choses directement dans dst, sans préserver les chemins.

0voto

zack Points 11

Pour copier à partir d'un chemin absolu, j'ai dû ajouter une commande sed.

Aussi, comme --parent ne fonctionnait pas correctement (cp: with --parents, the destination must be a directory), j'ai dû créer d'abord les dossiers.

find                    /root/src/ -type f        \
  | grep -i so$                                   \
  | sed             "s|^/root/src/||"             \
  | sed             "s|/\([^/]*\)so$||"           \
  | xargs -i mkdir  --parents          /root/dst/{}

find                    /root/src/ -type f       \
  | grep -i so$                                  \
  | sed             "s|^/root/src/||"            \
  | xargs -i cp         /root/src/{}  /root/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