web-dev-qa-db-fra.com

Comment déplacer efficacement tous les répertoires dans un seul répertoire dans le même dossier?

J'ai 100 fichiers dans un seul dossier, y compris un dossier appelé "cible". Je souhaite migrer tous les fichiers de ce dossier dans le dossier cible (sauf le dossier cible lui-même).

Existe-t-il une commande de terminal efficace pour le faire?

5
David Faux

S'il n'y a que les fichiers (et le répertoire cible) dans votre répertoire, utilisez simplement mv, plutôt que find:

mv * target

Il se plaindra que "cible" ne peut pas être déplacé sur lui-même, mais les fichiers seront tous dans la cible par la suite.

9
ohno

Cela fonctionne aussi bien:

find . -maxdepth 1 ! -name target ! -name . -exec mv "{}" target \;

L'un des principaux avantages de find par rapport à la complétude bash est que vous obtenez les fichiers cachés en même temps. mv * ... ne fera pas cela.

Vous pourriez peut-être aller avec quelque chose comme:

mv -t target * .[^.]*

Ou bien, comme le fait remarquer James, vous pouvez réduire la commande find pour ne regarder que les fichiers ... Et comme LoremIpsum l'a fait remarquer, s'il y en avait des milliards, utiliser xargs serait légèrement plus efficace:

find . -maxdepth 1 -type f -print0 | xargs -0 mv -t target
2
Oli

Utilisez ceci

$ mv target ..
$ mv * ../target
$ mv ../target .
1
G. He