Disons que j'ai un répertoire /hello
.
Alors je le fais mv /hello /hello2
.
Est-ce que je déplaçais /hello
en /hello2/hello
? Ou suis - je déplaçais /hello
à /hello2
?
Il semble que lorsque je fais quelque chose comme ça, j'obtiens des résultats incohérents.
mv
avec des fichiers, il fait la même chose.juste renaming.butmv
avec les répertoires Ce n'est pas bon de supprimer tout le répertoire avec le sous-répertoire à cause d'unemv
commande qui n'est pas sûr. il est donc déplacé commetest1/test2
. mais si vous voulez quand même l'atteindre, écrivez unalias
qui vérifie si le paramètre donné est répertoire et ensuite rm -rf le répertoire et utilise lamv
commande mais utilisez-le à vos risques et périls./hello
et/hello2
sont des répertoires, j'ai remarqué quecp /hello /hello2
c'est celui qui est incohérent. En fonction de la combinaison de barres obliques de fin, le contenu de/hello
est parfois copié/hello2
, et parfois le répertoire lui-même est copié.Réponses:
mv a b
tente de se déplacera
dansb
sib
est un répertoire ou un lien symbolique vers un répertoire. Sinon, il sera renommé (ou copié et supprimé si sur différents systèmes de fichiers)a
enb
.Pour obtenir un résultat cohérent pour déplacer un fichier dans un répertoire, vous pouvez faire:
ou
Si
dir
n'existe pas, vous obtiendrez une erreur, et il ne sera pas renommerfile
àdir
.Si, en revanche, vous voulez faire un
rename
sans avoir à vous soucier si le fichier de destination existe ou non en tant que répertoire, avec GNU mv, vous pouvez faire:Dans ce cas,
file
ne sera pas déplacé dansdest
sidest
est un répertoire. Cependant, si les deuxfile
etdest
sont des répertoires etdest
sont vides,file
ils seront renommésdest
(et l'original seradest
supprimé). Si les deux sont des répertoires etdest
n'est pas vide,mv -T
se plaindra.De même, si
file
et nedest
sont pas des répertoires (et cela inclut les liens symboliques, y compris les liens symboliques vers les répertoires),file
sera renommédest
(bien que vous obtiendrez une invite si vous n'avez pas la permission d'écriredest
), et l'originaldest
sera supprimé. Il y a une différence avecmv file dest
dans le cas oùdest
est un lien symbolique vers un répertoire. Avec-T
,file
est renommé endest
, mais sans-T
,file
est déplacé dans le répertoire indiqué pardest
.Donc, pour résumer, après
mv -T file dest
, soitfile
sera renommé,dest
soit vous obtiendrez un message d'erreur (ou une invite). Si la commande a réussi, l'originaldest
, s'il existait auparavant, aura été supprimé.la source
Cela dépend entièrement de la présence ou non d'un répertoire nommé '/ hello2'.
Si / hello2 existe ET est un répertoire, alors move déplacera toujours / hello vers / hello / hello2
Si / hello2 n'existe pas, alors move renommera toujours / hello en / hello2
Si / hello2 existe ET est un fichier, vous obtiendrez une erreur, "ne peut pas remplacer le non-répertoire 'hello2' par le répertoire 'hello'.
la source
J'ai essayé ces
j'espère que cela explique tout.
-v
est le mode verbeux.la source