mv (Unix) - mv (Unix)

mv
Mv example.png
Exemplo de mvuso
Autor (es) original (is) Ken Thompson , Dennis Ritchie
( AT&T Bell Laboratories )
Desenvolvedor (s) Vários open-source e comerciais desenvolvedores
lançamento inicial 3 de novembro de 1971 ; 49 anos atrás ( 1971-11-03 )
Sistema operacional Unix , semelhante a Unix , Inferno , IBM i
Plataforma Plataforma cruzada
Modelo Comando
Licença coreutils : GPLv3

mv é um comando Unix que move um ou mais arquivos ou diretórios de um lugar para outro. Se ambos os nomes de arquivo estiverem no mesmo sistema de arquivos, isso resultará em uma renomeação de arquivo simples; caso contrário, o conteúdo do arquivo é copiado para o novo local e o arquivo antigo é removido. Usar mv requer que o usuário tenha permissão de gravação para os diretórios entre os quais o arquivo se moverá. Isso ocorre porque mv altera o conteúdo de ambos os diretórios ( ou seja , a origem e o destino) envolvidos na movimentação. Ao usar o comando mv em arquivos localizados no mesmo sistema de arquivos, o carimbo de data / hora do arquivo não é atualizado.

Em implementações UNIX derivadas de AT&T UNIX , cp , ln e mv são implementados como um único programa com binários hard-linked . O comportamento é selecionado a partir do nome do caminho argv[0]. Esta é uma técnica comum pela qual comandos intimamente relacionados que foram empacotados como uma unidade permitem que o usuário especifique o curso particular da ação pretendida.

História

Um movecomando que move uma entrada de diretório para um novo diretório foi implementado pela primeira vez no Multics . Pode ser contratado mv. Mais tarde, o mvcomando apareceu na Versão 1 do Unix e se tornou parte do X / Open Portability Guide número 2 de 1987. A versão do mvpacote GNU coreutils foi escrita por Mike Parker, David MacKenzie e Jim Meyering. O comando mv também foi transferido para o sistema operacional IBM i .

Arquivo existente conflitante

Quando um nome de arquivo é movido para um nome de arquivo existente, o arquivo existente é excluído ( substituído ) por padrão. Se o arquivo existente não for gravável, mas estiver em um diretório gravável, o comando mv pede confirmação (se executado a partir de um terminal) antes de continuar, a menos que a opção -f (forçar) seja usada.

A sobregravação acidental pode ser evitada usando a bandeira GNU -n(formato longo --no-clobber:). Alternativamente, -ipede confirmação em cada conflito de nome.

Uma ambigüidade relacionada surge quando um nome de arquivo é movido para um diretório existente. Por padrão, mv trataria isso como uma tentativa de mover um nome dentro deste diretório. GNU mv tem uma -Topção para desabilitar essa suposição e tentar sobrescrever o diretório. Um inverso -ttorna a operação de mover para o diretório explícita.

Mover versus copiar e remover

Mover arquivos dentro do mesmo sistema de arquivos geralmente é implementado de maneira diferente de copiar o arquivo e depois remover o original. Em plataformas que não suportam renomear syscall, um novo link é adicionado ao novo diretório e o original é excluído. Os dados do arquivo não são acessados. Todos os sistemas em conformidade com POSIX implementam a chamada de renomeação .

Uma movimentação real (na verdade, uma renomeação) é dramaticamente mais rápida do que o procedimento tortuoso de copiar e mover. O número i do arquivo (abreviação de " número do inode ") não muda. Nenhuma permissão é necessária para ler o arquivo que está sendo movido, visto que - conceitualmente falando - está apenas catalogando informações que estão sendo alteradas como resultado da "movimentação". Uma vez que os diretórios de origem e de destino estão sendo modificados, a saber, as entradas estão sendo criadas no diretório de destino e apagadas de dentro do diretório de origem, a permissão de "gravação" em ambos os diretórios é necessária para concluir a movimentação. Mover arquivos de um sistema de arquivos para outro pode falhar totalmente ou pode ser executado automaticamente como uma ação atômica de copiar e excluir; os detalhes reais dependem da implementação.

Mover um diretório de um pai para um diretório pai diferente requer permissão de gravação no diretório que está sendo movido, além de permissões para modificar o antigo e o novo pai. Isso ocorre porque o número i para a entrada de diretório ".." (que pode ser usado em qualquer contexto como um apelido para o pai do diretório atual) muda como resultado da renomeação.

Opções

A maioria das versões de suporte mv:

  • -i Para processar interativamente, escreva um prompt para erro padrão antes de mover um arquivo que sobrescreveria um arquivo existente. Se a resposta da entrada padrão começar com o caractere 'y' ou 'Y', o movimento é tentado. (Substitui a opção -f anterior.)
  • -f f orce substituindo o destino (opção -i substituições anterior).

Essas opções fazem parte das Diretrizes de Portabilidade X / Open, posteriormente a base do POSIX e do SUS . Todas as implementações de mv compatíveis com POSIX devem oferecer suporte a eles.

Exemplos

Comando Explicação
mv myfile mynewfilename renomeia 'myfile' para 'mynewfilename'.
mv myfile subdir/myfile move 'meuarquivo' para 'subdir / meuarquivo' em relação ao diretório atual
mv myfile subdir igual ao comando anterior, o nome do arquivo está implícito como sendo o mesmo
mv be.03 /mnt/bkup/bes copia 'be.03' para o diretório 'bes' do volume montado 'bkup', então 'be.03' é removido
mv be.03/* /mnt/bkup/bes Igual ao anterior, exceto que cada arquivo retirado be.03é excluído individualmente em vez de todos serem excluídos de uma vez após a conclusão da cópia inteira.
mv afile another mydir move vários arquivos para o diretório 'mydir'
mv /var/log/*z ~/logs Isso leva mais tempo do que o esperado se '/ var' estiver em um sistema de arquivos diferente, como costuma acontecer, pois os arquivos serão copiados e excluídos. O shell se expande ~para o diretório inicial do usuário e é tratado *como um caractere curinga .

Observe que, no exemplo acima, / mnt se refere ao diretório (o "ponto de montagem") sobre o qual um determinado sistema de arquivos é montado. Nomear esses diretórios / mnt é uma convenção popular, mas de forma alguma necessária. Um "sistema de arquivos" pode ser considerado uma árvore independente que é logicamente considerada uma unidade; sua raiz é "montada" em um diretório de escolha do administrador. Qualquer conteúdo anterior desse diretório fica invisível, mas é "restaurado" quando o novo volume é desmontado.

Veja também

Referências

links externos