mv * folder (en évitant l'erreur 'ne peut pas bouger')

Chaque fois que je veux déplacer des milliers de files vers un nouveau dossier, je rencontre toujours le même problème.

> mkdir my_folder > mv * my_folder mv: cannot move 'my_folder to a subdirectory of itself 'my_folder' 

Bien que je pense que l'erreur ci-dessus est inoffensive ( est-ce? ) Je me request s'il y a un moyen de l'éviter.

Au cas où ça count, je suis intéressé par une solution en zsh ou bien qui fonctionne bien sur plusieurs shells.

En zsh, avec l'option extended_glob activée, vous pouvez utiliser ~ pour exclure les patterns de globs, vous pouvez donc utiliser:

 setopt extended_glob mv -- *~my_folder my_folder 

Ou utilisez l'opérateur de négation (toujours avec extended_glob ):

 mv -- ^my_folder my_folder 

Utilisez des accolades pour éviter de taper deux fois le nom du directory:

 mv -- {^,}my_folder 

En bash (pour les autres requesturs qui l'utilisent), vous pouvez utiliser des globs étendus de type Ksh:

 # If it's not already enabled shopt -s extglob mv -- !(my_folder) my_folder 

Vous pouvez également utiliser cette syntaxe dans zsh si vous activez l'option ksh_glob .

S'il n'y a que des files réguliers en dehors du nouveau sous-directory, vous pouvez utiliser find:

 find . -type f -maxdepth 1 -exec mv {} my_folder \; 

L'option -type f ne finda que des files (pas des dirs). -maxdepth 1 va continuer à chercher seulement dans . (ne se répète pas dans d'autres dirs). Le -exec … fait votre déménagement.

Dans zsh, vous pouvez abréger ceci

 mv *(.) my_folder 

Oui, l'erreur est inoffensive.

vous pouvez utiliser :

 mv * my_folder 2>/dev/null