web-dev-qa-db-fra.com

Copier les matières du répertoire actuel sur un sous-répertoire

Comment puis-je utiliser le terminal Linux pour tout copier dans le répertoire actuel à un sous-répertoire?

13
Oguz Bilgic

Si vous souhaitez copier le contenu du dossier de manière récursive (lancera une erreur, des alternatives ci-dessous):

cp -r * sub/

Un peu plus de hacky, mais travaille sur des sous-répertoires non vides:

TARGETDIR='targetdir here';cp -r `find . -maxdepth 1 ! -name "$TARGETDIR"` "$TARGETDIR"

Un autre Onliner:

TARGETDIR='targetdir here';for file in *;do test "$file" != "$TARGETDIR" && cp "$file" "$TARGETDIR/";done

Ou récursif:

TARGETDIR='z';for file in *;do test "$file" != "$TARGETDIR" && cp -r "$file" "$TARGETDIR/";done
12
Lekensteyn

Je suggère de déplacer le répertoire cible en dehors du répertoire source, puis de la remettre à nouveau; MV est gratuit (si vous faites attention à ne pas passer à un système de fichiers différent), sauf si vous attendez d'autres processus interférer/être interféré.

La plupart des solutions postées ci-dessus ne fonctionnent pas s'il y a des espaces dans des noms de fichiers. Je suggérerais d'utiliser des variantes de trouver -print0 | Xargs -0, ou trouver -exec, etc.

2
alex

Cela fonctionnera-t-il pour vous?

cp -r * subdir/

Si vous vouliez vous déplacer au lieu de tout copier dans le directeur actuel vers un sous-répertoire, vous pourriez faire:

mv * subdir/
0
karlphillip