AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 510553
Accepted
Urda
Urda
Asked: 2019-04-05 09:53:38 +0800 CST2019-04-05 09:53:38 +0800 CST 2019-04-05 09:53:38 +0800 CST

Qual é a diferença entre 'rename' e 'mv'?

  • 772

Não está completamente claro para mim, mas qual é a diferença entre mve rename(de util-linux-ng 2.17.2as /usr/bin/rename)? Existem vantagens de um sobre o outro além renamede aceitar expressões regulares e mvnão? Acredito renameque também possa lidar com várias renomeações de arquivos de uma só vez, enquanto mvnão faz isso.

Não consegui encontrar uma indicação clara em suas manpáginas do que mais os diferencia ou através de alguma investigação por conta própria.

rename mv
  • 4 4 respostas
  • 15786 Views

4 respostas

  • Voted
  1. Best Answer
    ilkkachu
    2019-04-05T12:36:15+08:002019-04-05T12:36:15+08:00

    É basicamente o que diz na tampa, para ambos.

    mvé um utilitário padrão para mover um ou mais arquivos para um determinado destino. Ele pode ser usado para renomear um arquivo, se houver apenas um arquivo para mover. Se houver vários, mvsó funciona se o destino for diretório, e move os arquivos para lá.

    Então mv foo bar, moverá o arquivo foopara o diretório bar(se existir) ou renomeará foopara bar(se barnão existir ou não for um diretório). mv foo1 foo2 barapenas moverá os dois arquivos para o diretório barou reclamará se barnão for um diretório.

    mvchamará a rename()função da biblioteca C para mover os arquivos e, se isso não funcionar (eles estão sendo movidos para outro sistema de arquivos), ele copiará os arquivos e removerá os originais.

    Se tudo o que você tem é mve deseja renomear vários arquivos, você terá que usar um loop de shell. Há uma série de perguntas sobre isso aqui no site, veja por exemplo this , this , e outros .


    Por outro lado, os vários renameutilitários renomeiam os arquivos, individualmente.

    O renamefrom util-linux que você mencionou faz uma simples substituição de string, por exemplo rename foo bar *, mudaria foobarpara barbar, e asdffoopara asdfbar. No entanto, não aceita uma expressão regular!

    O utilitário de renomeação Perl ( ou várias instâncias dele ) usa uma expressão Perl para transformar os nomes dos arquivos. Um provavelmente usará um comando, onde o padrão é uma expressão regular.s/pattern/replacement/

    Tanto a renomeação util-linux quanto a renomeação Perl podem ser usadas para mover arquivos para outro diretório ao mesmo tempo, fazendo as alterações apropriadas no nome do arquivo, mas é um pouco estranho. Nem faz mais do que chamar rename()os arquivos, portanto, mover de um sistema de arquivos para outro não funciona.

    Quanto ao que renamevocê tem, pode depender de sua distribuição e/ou do que você instalou. A maioria deles suporta rename --version, então use isso para identificar qual você tem.

    • 23
  2. Gilles Quenot
    2019-04-05T11:18:22+08:002019-04-05T11:18:22+08:00

    mv

    É uma linha de comando básica projetada para fazer uma coisa e fazê-la bem (filosofia Unix): mover arquivo(s) ou diretório(s) .

    Você pode hackear STDOUT& STDIN¹ para modificar rapidamente a string de destino, mas não é apenas um hack inteligente

    renomear (o de Perl)

    aviso Existem outras ferramentas com o mesmo nome que podem ou não ser capazes de fazer isso, então tenha cuidado.

    Quando as pessoas falam de rename, pensamos neste, não ELFnaquele, menos poderoso (mágico?).

    Não é básico, é Perl. Você pode passar algumas funções do Perl para dentro, e é extremamente poderoso.

    Considere este exemplo:

    Você deseja renomear vários arquivos como

    foobar_1.txt
    foobar_2.txt
    foobar_3.txt
    

    Você pode preceder zeros aos dígitos sprintf()assim (usando regex, heh, é Perl :D ):

    rename 's/(\d+)/sprintf("%04d", $1)/e' foobar_*.txt
    

    Agora você tem :

    foobar_0001.txt
    foobar_0002.txt
    foobar_0003.txt
    

    Não é realmente um comando básico, não é?

    rename não é realmente projetado para mover dir(s) , mas pode fazê-lo:

    $ mkdir -p /tmp/foo/bar/base
    $ touch /tmp/foo/bar/base/file
    $ rename 's!/tmp/foo/bar/base/file!/tmp/file!' /tmp/foo/bar/base/file
    

    O arquivo movido

    /tmp/file
    

    ¹ algum código que vemos em *.stackexchange.*sites

    insira a descrição da imagem aqui

    for FILE in `ls *.txt`
    do
        mv ${FILE} `echo ${FILE} | sed 's/anything_ugly/anything_still_ugly/'`
    done
    

    Não é o caminho a seguir , é simplesmente buggy, apenas para explicar por que usar a ferramenta certa no momento certo

    • 2
  3. Vercingatorix
    2019-04-05T12:38:30+08:002019-04-05T12:38:30+08:00

    mvsimplesmente altera o nome do arquivo (também pode movê-lo para outro sistema de arquivos ou caminho). Você dá a ele um nome antigo e um novo nome, e ele altera o arquivo para o novo nome ou local.

    renameé usado para fazer alterações de nomenclatura em massa.

    Digamos que você tenha milhares de arquivos foo000.loge foo999.logqueira alterá-los bar000.logpara bar999.log.

    Com mvvocê teria que fazer mv foo000.log bar000.log, mv foo001 bar001.log, etc. ou então escrever um script.

    Com renamevocê basta fazer rename foo bar foo*.log, e voila, mil arquivos são alterados em um instante! Muito legal.

    Confira a man renamepágina novamente para obter detalhes.

    • 2
  4. K7AAY
    2019-04-05T10:04:27+08:002019-04-05T10:04:27+08:00

    mv move ou renomeia arquivos e diretórios e fará backup deles; renomear apenas renomeia os arquivos.

    mv tem mais recursos e opções. Observe as opções nas páginas man de cada uma para ver as diferenças de recursos. Vamos dar uma olhada usando man no Ubuntu 18.04LTS (sua milhagem pode variar dependendo da versão de cada pacote):

    opções mv (omitindo ajuda e versão)

       --backup[=CONTROL]  
              make a backup of each existing destination file  
    
       -b     like --backup but does not accept an argument  
    
       -f, --force  
              do not prompt before overwriting  
    
       -i, --interactive  
              prompt before overwrite  
    
       -n, --no-clobber  
              do not overwrite an existing file  
    
      If you specify more than one of -i, -f, -n, only the final one takes effect.  
    
       --strip-trailing-slashes  
              remove any trailing slashes from each SOURCE argument  
    
       -S, --suffix=SUFFIX  
              override the usual backup suffix  
    
       -t, --target-directory=DIRECTORY  
              move all SOURCE arguments into DIRECTORY  
    
       -T, --no-target-directory  
              treat DEST as a normal file  
    
       -u, --update  
              move only when the SOURCE file is newer than the destination file or when the destination file is missing  
    
       -v, --verbose  
              explain what is being done  
    
       -Z, --context  
              set SELinux security context of destination file to default type  
    

    opções de renomeação (omitindo ajuda e versão)

       -s, --symlink   
              Do not rename a symlink but its target.  
    
       -v, --verbose  
              Show which files where renamed, if any.  
    
       -n, --no-act  
              Do not make any changes.  
    
       -o, --no-overwrite  
              Do not overwrite existing files.            
    
    • 0

relate perguntas

  • Remova caracteres de nomes de arquivos recursivamente

  • Ubuntu 16.04: `mv` executado erroneamente com `~/*` como alvo e não consegue entender o resultado

  • Como mv .bin bin

  • Krename: como reiniciar a numeração para cada pasta?

  • Renomeie (acrescentar) arquivos CSV em massa com base em um valor dentro

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve