J'ai une petite question ici.
Si j'ai deux fichiers, par exemple filea
et fileb
, mv filea fileb
serait
- supprimer
fileb
- renommer
filea
enfileb
Ensuite, si j'ai deux répertoires, disons dira
et dirb
, mv dira dirb
serait
- déplacer
dira
dansdirb
(il deviendradirb/dira
)
Notant que dans les deux cas, il n'y a pas d'avis ou de message, cela est assez incohérent pour moi. Je pense que mv dira dirb
devrait simplement écraser dirb
avec le contenu de dira
(ou fusionner les deux répertoires sous un répertoire nommé dirb
).
Je me souviens avoir lu quelque part qu'un nom de répertoire avec une barre oblique (comme dira/
) est traité comme un répertoire, et un nom sans barre oblique (comme dira
) est traité comme un fichier (dans certaines limites, bien sûr). Quoi qu'il en soit, je veux maintenant que le shell (zsh et éventuellement bash) respecte ma notation d'un répertoire en utilisant une barre oblique. Y a-t-il une option de terminal qui me permet de faire respecter cela?
Pour clarifier, voici mon comportement souhaité:
mv dira dirb
entraîne l’dirb
écrasement du contenu dedira
mv dira dirb/
entraîne ledira
déplacement versdirb
(endirb/dira
)
Quelqu'un a-t-il pensé la même chose que moi? Ou suis-je juste bizarre?
Réponses:
Oui, c'est un peu incohérent, même dans les outils GNU.
Un problème avec votre proposition est que les répertoires non vides ne peuvent pas être supprimés. En dehors de cela,
-T
(dans GNU land, de toute façon) se rapproche de ce que vous voulez (le premier cas):la source
alias ren=mv -T
.Si vous voulez simplement tout déplacer de dira à dirb, vous pouvez exécuter
mv dira/* dirb
.Selon la page de manuel mv sur mon HP-UX.
The mv command moves:
+ One or more directory subtrees (directory1, [directory2, ...]) to a new or existing directory (dest-directory).
la source
shopt -s dotglob
dans bash corrigera cela.