Não está completamente claro para mim, mas qual é a diferença entre mv
e rename
(de util-linux-ng 2.17.2
as /usr/bin/rename
)? Existem vantagens de um sobre o outro além rename
de aceitar expressões regulares e mv
não? Acredito rename
que também possa lidar com várias renomeações de arquivos de uma só vez, enquanto mv
não faz isso.
Não consegui encontrar uma indicação clara em suas man
páginas do que mais os diferencia ou através de alguma investigação por conta própria.
É 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,mv
só funciona se o destino for diretório, e move os arquivos para lá.Então
mv foo bar
, moverá o arquivofoo
para o diretóriobar
(se existir) ou renomearáfoo
parabar
(sebar
não existir ou não for um diretório).mv foo1 foo2 bar
apenas moverá os dois arquivos para o diretóriobar
ou reclamará sebar
não for um diretório.mv
chamará arename()
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 é
mv
e 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
rename
utilitários renomeiam os arquivos, individualmente.O
rename
from util-linux que você mencionou faz uma simples substituição de string, por exemplorename foo bar *
, mudariafoobar
parabarbar
, easdffoo
paraasdfbar
. 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
rename
você tem, pode depender de sua distribuição e/ou do que você instalou. A maioria deles suportarename --version
, então use isso para identificar qual você tem.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 inteligenterenomear (o de Perl)
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ãoELF
naquele, 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
Você pode preceder zeros aos dígitos
sprintf()
assim (usando regex, heh, é Perl :D ):Agora você tem :
Não é realmente um comando básico, não é?
rename não é realmente projetado para mover dir(s) , mas pode fazê-lo:
O arquivo movido
¹ algum código que vemos em
*.stackexchange.*
sitesNão é o caminho a seguir , é simplesmente buggy, apenas para explicar por que usar a ferramenta certa no momento certo
mv
simplesmente 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.log
efoo999.log
queira alterá-losbar000.log
parabar999.log
.Com
mv
você teria que fazermv foo000.log bar000.log
,mv foo001 bar001.log
, etc. ou então escrever um script.Com
rename
você basta fazerrename foo bar foo*.log
, e voila, mil arquivos são alterados em um instante! Muito legal.Confira a
man rename
página novamente para obter detalhes.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)
opções de renomeação (omitindo ajuda e versão)