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 / ubuntu / Perguntas / 1345737
Accepted
Saeed Neamati
Saeed Neamati
Asked: 2021-06-14 21:15:32 +0800 CST2021-06-14 21:15:32 +0800 CST 2021-06-14 21:15:32 +0800 CST

Como renomear arquivos no Ubuntu, recursivamente, usando grep e renomear não encontrar?

  • 772

Existem zilhões de perguntas e respostas sobre como renomear arquivos. Eu sou novo no Linux e essa infinidade de maneiras possíveis e resultados diferentes e configurações diferentes me confundem.

Por exemplo:

  • renamefunciona, mas não recursivamente
  • grepfunciona recursivamente, mas não pode ser usado para pesquisar nomes de arquivos e diretórios, em vez do conteúdo do arquivo
  • findfunciona, mas tem uma sintaxe longa e feia quando você deseja pesquisar usando expressões regulares.

E também muitas respostas sobre ask ubuntu e stackoverflow não funcionam para mim e não sei como depurá-las e solucioná-las.

Então, me perdoe por perguntar mais uma vez.

Estou procurando uma maneira limpa e memorizável de:

Renomear arquivos recursivamente usando expressão regular simples .

Eu já faço isso para o conteúdo dos arquivos usando esta sintaxe:

grep -rl search_regex | xargs sed -i 's/old/new/g'

Funciona sem muita frustração. Funciona fora da caixa. Ele apenas funciona. Estou procurando uma solução viável que seja limpa e organizada. Você pode me ajudar por favor?

command-line
  • 3 3 respostas
  • 1111 Views

3 respostas

  • Voted
  1. pLumo
    2021-06-14T21:53:59+08:002021-06-14T21:53:59+08:00

    Não é possível encontrar nada longo e feio sobre find:

    find . -regex 'search_regex' -exec rename 's/old/new/g' {} +
    
    • 4
  2. terdon
    2021-06-15T02:01:38+08:002021-06-15T02:01:38+08:00

    Você pode tornar renamerecursiva se essa for a sintaxe que você preferir:

    shopt -s globstar
    rename 's/old/new/' **/*
    

    globstarA opção do Bash faz **corresponder 0 ou mais diretórios ou arquivos recursivamente, portanto, **/*será recursiva em toda a árvore de diretórios. Você só precisa escrever seu padrão de pesquisa como um glob em vez de uma expressão regular. Por exemplo, para renomear todos os arquivos cujo nome contém foo, você faria:

    shopt -s globstar
    rename 's/old/new/' **/*foo*
    
    • 2
  3. Best Answer
    wizardpurple
    2021-06-14T22:23:14+08:002021-06-14T22:23:14+08:00

    Você deve ser capaz de manter mais ou menos o mesmo formato que tinha com grep e sed, embora eu ache que você ainda precisará de uma ferramenta como find para fornecer ao grep arquivos para pesquisar.

    Edit: atualizado com informações dos comentários. obrigado @pLumo e @terdon por mostrar que falharia em arquivos com caracteres de nova linha no nome.

    find /some/directory -print0 | grep -zE "search_regex" | rename -0 's/old/new/g'
    
    • 0

relate perguntas

Sidebar

Stats

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

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

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