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?
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.
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
Utilisez ceci
$ mv target ..
$ mv * ../target
$ mv ../target .