Donc je vais et déplace un tas de fichiers
mv /source /dest & mv /source/* /dest/dest/ & ... ...
alors je suis imprudent et
mv /source/filena* /dest/dest/ *
OMG! ^c^c^c^c
[Pas de réponse du commandement du terminal] Que se passe-t-il réellement ici?
Que se passe-t-il lorsque je mets un astérisque à la fin d’une commande au lieu d’un &
(esperluette)?
Le shell développe le caractère générique *
. La commande mv
ne voit jamais le caractère générique, mais uniquement le résultat de l’extension.
Le caractère générique *
développe dans la liste des fichiers du répertoire en cours dans l’ordre lexicographique. Si le dernier fichier est un répertoire, tous les fichiers précédents ( /source.filenafoo
, /source/filenabar
, /dest/dest
, hello
) sont déplacés vers ce sous-répertoire. Si le dernier fichier n’est pas un répertoire, mv
plaint que “target a.png
n’est pas un répertoire” (ou des mots à cet effet).
Voir Que fait mv ./*
sans spécifier de destination? pour des exemples plus détaillés.
Un astérisque à la fin d’une ligne de commande est traité de la même manière qu’un astérisque n’importe où ailleurs sur la ligne – il s’agit d’un caractère générique correspondant à zéro ou plusieurs caractères. Plus précisément, dans cet exemple, le *
dans mv /source/filena* /dest/dest/ *
est remplacé par le nom de chaque fichier et dossier de votre répertoire actuel (sauf ceux commençant par un point), et tout ce qui arrive à être le dernier dans cette liste est où mv
va essayer de tout mettre.