a barra (/) depois de um nome de diretório nos comandos shell

11

Eu tenho uma pequena pergunta aqui.

Se eu tiver dois arquivos, digamos filea e fileb , mv filea fileb

  • excluir fileb
  • renomear filea para fileb

Então, se eu tiver dois diretórios, diga dira e dirb , mv dira dirb

  • mova dira para dirb (ele se tornará dirb/dira )

Notando que em ambos os casos não há aviso ou mensagem, então isso é bastante inconsistente para mim. Eu acho que mv dira dirb deve sobrescrever dirb com o conteúdo de dira (ou mesclar os dois diretórios sob 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 o nome sem barra (como dira ) é tratado como um arquivo (para certas extensões, é claro) . De qualquer forma agora eu quero fazer o shell (zsh e possivelmente bash) respeitar minha notação de um 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 em dirb sendo sobrescrito com o conteúdo de dira
  • mv dira dirb/ resulta em dira sendo movido para dirb (em dirb/dira )

Alguém pensou da mesma maneira que eu? Ou eu sou apenas estranho?

    
por phunehehe 20.08.2010 / 11:53

2 respostas

10

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, de qualquer forma) aproxima o que você quer (o primeiro caso):

$ ls dira/ dirb/
dira/:
a

dirb/:
b
$ mv -iT dira/ dirb/
mv: overwrite 'dirb/'? y
mv: cannot move 'dira/' to 'dirb/': Directory not empty
$ rm dirb/b 
$ mv -iT dira/ dirb/
mv: overwrite 'dirb/'? y
$ ls dira/ dirb/
ls: cannot access dira/: No such file or directory
dirb/:
a
    
por 20.08.2010 / 12:22
0

Se você quiser apenas mover tudo de dira para dirb, pode executar mv dira/* dirb .

Como na página man mv no meu HP-UX.

The mv command moves:

+ One or more directory subtrees (directory1, [directory2, ...]) to a new or existing directory (dest-directory).

    
por 20.08.2010 / 12:38