Eu tenho uma pequena pergunta aqui.
Se eu tiver dois arquivos, digamos filea
e fileb
, mv filea fileb
seria
- excluir
fileb
- renomeie
filea
parafileb
Então, se eu tiver dois diretórios, digamos dira
e dirb
, mv dira dirb
seria
- mudar
dira
paradirb
(se tornarádirb/dira
)
Observando que em ambos os casos não há aviso ou mensagem, isso é bastante inconsistente para mim. Eu acho que mv dira dirb
deveria substituir dirb
o conteúdo de dira
(ou mesclar os dois diretórios em um diretório chamado dirb
).
Lembro-me de ler em algum lugar que um nome de diretório com uma barra (como dira/
) é tratado como um diretório, e um nome sem barra (como dira
) é tratado como um arquivo (até certo ponto, é claro). De qualquer forma, agora eu quero fazer com que o shell (zsh e possivelmente bash) respeite minha notação de diretório usando uma barra. Existe uma opção de terminal que me permita impor isso?
Para esclarecer, aqui está o meu comportamento desejado:
mv dira dirb
resulta emdirb
ser substituído pelo conteúdo dedira
mv dira dirb/
resulta emdira
ser movido paradirb
(indirb/dira
)
Alguém já pensou da mesma maneira que eu? Ou sou apenas estranho?
Respostas:
Sim, isso é um pouco inconsistente, mesmo dentro das ferramentas GNU.
Um problema com sua proposta é que diretórios não vazios não podem ser removidos. Além disso,
-T
(na terra GNU, enfim) se aproxima do que você deseja (o primeiro caso):fonte
alias ren=mv -T
.Se você quiser mover tudo de dira para dirb, poderá executar
mv dira/* dirb
.Conforme a página de manual do mv no meu HP-UX.
The mv command moves:
+ One or more directory subtrees (directory1, [directory2, ...]) to a new or existing directory (dest-directory).
fonte
shopt -s dotglob
no bash irá corrigir isso.