98 votes

Comment déplacer tous les fichiers du dossier actuel vers un sous-dossier ?

Je suis sur le chemin :

/myuser/downloads/

Et je crée un sous-dossier :

/myuser/downloads/new

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

comment puis-je faire ?

J'ai essayé :

mv -R *.* new/

Mais move ne prend pas le commutateur -R il semble.

142voto

enzotib Points 86709

La commande

mv !(new) new

devrait faire l'affaire. Si ça ne marche pas, exécutez shopt -s extglob d'abord.

Pour déplacer aussi les fichiers/répertoires cachés (ceux qui commencent par un point), exécutez aussi shopt -s dotglob d'abord.
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).

21voto

Mike Points 1

J'ai trouvé quelque chose de similaire mais qui est un peu plus simple à comprendre, et qui pourrait bien fonctionner pour vous aussi :

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

Ajout d'une explication à la solution ci-dessus :

Depuis les pages du 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 retournera à qui ne correspond pas à une nouvelle
  • xargs mv -t new déplacera les fichiers qui lui sont destinés depuis grep -v dans le répertoire cible

15voto

Alex Points 88

Il suffit d'utiliser mv * subdir1 et ignorez l'avertissement.

Vous pouvez simplement utiliser mv * subdir1 . Vous verrez un message d'avertissement relatif à la tentative de déplacer subdir1 en soi, comme ceci :

mv: cannot move 'subdir1' to a subdirectory of itself, 'subdir1/subdir1'

Mais il va déplacer tous les autres fichiers et répertoires vers subdir1 correctement.

Un exemple :

$ ls
$ mkdir dir1 dir2 dir3      
$ touch file1.txt file2.txt file3.txt
$ mkdir subdir1
$ ls
#=> dir1  dir2  dir3  file1.txt  file2.txt  file3.txt  subdir1
$ mv * subdir1
#=> mv: cannot move 'subdir1' to a subdirectory of itself, 'subdir1/subdir1'
$ ls
#=> subdir1
$ ls subdir1
#=> dir1  dir2  dir3  file1.txt  file2.txt  file3.txt

9voto

jpezz Points 1060

Une idée simple. En supposant que vous êtes dans /myuser , renommer téléchargements a nuevo créer une nouvelle téléchargements puis déplacez nuevo en elle.

mv downloads new # downloads is now called new
mkdir downloads # create new directory downloads
mv new downloads # move new into it.

1voto

demian Points 11

Si vous voulez déplacer tous les fichiers d'un dossier vers 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 dans votre sous-dossier.

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X