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 / 717727
Accepted
mariano-daniel
mariano-daniel
Asked: 2022-09-19 07:23:44 +0800 CST2022-09-19 07:23:44 +0800 CST 2022-09-19 07:23:44 +0800 CST

alterar as extensões de arquivo como com o comando 'ren' no DOS?

  • 772

Escudo: zsh

Olá pessoal, estou tentando alterar rapidamente a extensão de um arquivo como no DOS.

Eu encontrei esta pergunta sobre isso (mais ou menos) ainda não responde à pergunta: Renomeie vários arquivos com mv para alterar a extensão

Eu quero alterar a extensão de um arquivo em um diretório específico distante do meu pwd, então quando eu mvfaço não quero redigitar novamente o mesmo diretório, ou seja:

mv /Users/dir/dir1/moredir/long/foo.txt /Users/dir/dir1/moredir/long/foo.yaml

Um n00b como eu simplesmente assumiria que você pode ir /Users/dir/dir1/moredir/long/foo.txt *.yaml, mas esse não é o caso.

Existe alguma maneira simples de conseguir isso?

Desde já agradeço e desejo um ótimo final de semana!

zsh mv
  • 2 2 respostas
  • 51 Views

2 respostas

  • Voted
  1. Best Answer
    Gilles 'SO- stop being evil'
    2022-09-19T13:00:50+08:002022-09-19T13:00:50+08:00

    Para um único arquivo, você pode usar a expansão de chaves para construir uma linha de comando para renomear um arquivo, onde apenas uma parte do nome do arquivo é alterada.

    mv /Users/dir/dir1/moredir/long/foo.{txt,yaml}
    

    A sintaxe geral é , que se expande para antes da execução .mv UNCHANGED1{OLD,NEW}UNCHANGED2mv UNCHANGED1OLDUNCHANGED2 UNCHANGED1NEWUNCHANGED2mv


    Para vários arquivos, a função zsh zmvfornece maneiras convenientes de mover e renomear arquivos. Coloque isso no seu .zshrcou execute-o na linha de comando em cada sessão em que você deseja usar zmv:

    autoload -zU zmv
    

    Então, para alterar a extensão dos arquivos no diretório atual, você pode executar qualquer um deles. Observe que você precisa de aspas simples em torno dos argumentos, porque o *e $precisa ser interpretado dentro zmve não antes de invocar zmv.

    zmv '*.txt' '$f:r.yaml'
    zmv '(*).txt' '$1.yaml'
    zmv -w '*.txt' '$1.yaml'
    zmv -W '*.txt' '*.yaml'
    

    Para alterar a extensão de arquivos em outro diretório, sem precisar repetir o caminho do diretório:

    zmv '/Users/dir/dir1/moredir/long/*.txt' '$f:r.yaml'
    (cd /Users/dir/dir1/moredir/long && zmv '(*).txt' '$1.yaml')
    (cd /Users/dir/dir1/moredir/long && zmv -w '*.txt' '$1.yaml')
    (cd /Users/dir/dir1/moredir/long && zmv -W '*.txt' '*.yaml')
    

    No texto de substituição:

    • $fé todo o caminho de origem.
    • :ré um modificador de histórico que remove a extensão do nome do arquivo.
    • $1é o primeiro grupo entre parênteses no padrão de origem. Grupos entre parênteses não podem conter separadores de diretório (com uma exceção que não se aplica aqui).
    • O -wsinalizador coloca automaticamente cada curinga em um grupo.
    • O -Wsinalizador faz com que cada um *no texto de substituição represente qualquer correspondência *correspondente no padrão de origem.

    (Existem várias outras ferramentas para fazer isso, mas elas não fazem parte da instalação padrão na maioria das variantes do Unix, incluindo o macOS. Como você está usando o zsh, aproveite o zmv, que é muito bom em seu trabalho.)

    • 1
  2. Kusalananda
    2022-09-19T08:44:50+08:002022-09-19T08:44:50+08:00

    Para renomear o arquivo único foo.txtno foo.yamldiretório /Users/dir/dir1/moredir/long, você pode primeiro entrar nesse diretório e depois executar mv:

    cd /Users/dir/dir1/moredir/long
    mv foo.txt foo.yaml
    cd -    # to move back to the original working directory
    

    Ou você pode usar uma expansão de chave que se expande para os nomes de caminho de origem e destino:

    mv /Users/dir/dir1/moredir/long/foo.{txt,yaml}
    

    O acima se expandiria para o comando completo

    mv /Users/dir/dir1/moredir/long/foo.txt /Users/dir/dir1/moredir/long/foo.yaml
    

    ... antes que o shell chame mv. Obviamente, isso só funcionaria enquanto o arquivo permanecesse no mesmo diretório após ser renomeado.

    • 0

relate perguntas

  • Em que circunstâncias o executável encontrado primeiro no caminho não será usado

  • Como mv .bin bin

  • Symlinking para todos os arquivos de ponto e diretórios

  • Como incrementar uma variável nomeada dinamicamente em `zsh`

  • Por que não consigo definir uma variável somente leitura chamada path no zsh?

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