Comment déplacer tous les fichiers du dossier en cours vers le sous-dossier?

43

Je suis sur le chemin:

/myuser/downloads/

Et je crée un sous-dossier:

/myuser/downloads/new

Maintenant, je veux déplacer tous les fichiers et dossiers / sous-dossiers du dossier de téléchargements vers le sous-dossier.

comment puis-je faire cela?

J'ai essayé:

mv -R *.* new/

Mais le mouvement ne prend pas le commutateur -R, il semble.

    
posée Blankman 31.12.2011 - 13:38
la source

4 réponses

72

La commande

mv !(new) new

devrait faire l'affaire. Si cela ne fonctionne pas, exécutez d'abord shopt -s extglob .

Pour déplacer également les fichiers / répertoires masqués (commençant par un point), exécutez également shopt -s dotglob en premier.
Donc, pour résumer:

shopt -s extglob dotglob
mv !(new) new
shopt -u dotglob

(il est toujours préférable de désactiver dotglob pour éviter les mauvaises surprises).

    
réponse donnée enzotib 31.12.2011 - 13:57
la source
3

J'ai trouvé quelque chose comme cela était un peu plus simple, cela pourrait bien fonctionner pour vous:

ls | grep -v new | xargs mv -t new

Ajouter une explication à la solution ci-dessus:

À partir des pages de manuel:

  • mv -t

    -t, --target-directory=DIRECTORY
          move all SOURCE arguments into DIRECTORY
    
  • grep -v

    -v, --invert-match
          Invert the sense of matching, to select non-matching lines.
    

Expliqué par étape:

  • ls listera les fichiers dans le répertoire courant
  • grep -v new renverra la canalisation à celle qui ne correspond pas à la nouvelle
  • xargs mv -t new déplacera les fichiers de grep -v vers le répertoire cible
réponse donnée lockwobr 01.09.2017 - 00:59
la source
2

Idée simple En supposant que vous êtes dans / myuser , renommez téléchargements en nouveau , créez un nouveau répertoire downloads puis déplacez nouveau dedans.

mv downloads new # downloads is now called new
mkdir downloads # create new directory downloads
mv new downloads # move new into it.
    
réponse donnée jpezz 05.09.2017 - 23:56
la source
1

Si vous souhaitez déplacer tous les fichiers d’un dossier vers l’un de ses sous-dossiers, vous pouvez utiliser la commande suivante:

find /myuser/downloads/ -type d -name 'new' -prune -type f | xargs mv -t /myuser/downloads/new

Il trouvera tous les fichiers et les déplacera ensuite dans votre sous-dossier.

@waltinator: ajout de -type d -name 'new' -prune pour empêcher la traversée de /myuser/downloads/new .

    
réponse donnée demian 13.10.2016 - 16:00
la source

Lire d'autres questions sur les étiquettes