Renomeando vários arquivos para começar com letra maiúscula

Renomeando vários arquivos para começar com letra maiúscula

estou tentando atualizar meu site para usar o CodeIgniter 3, mas a partir do CodeIgniter 3.0, todos os nomes de arquivos de classe (bibliotecas, drivers, controladores e modelos) devem ser nomeados de maneira semelhante ao Ucfirst ou em outras palavras - eles devem começar com maiúscula carta.

Por exemplo, se você tiver o seguinte arquivo de biblioteca:

application/libraries/mylibrary.php

... então você terá que renomeá-lo para:

application/libraries/Mylibrary.php

O mesmo vale para bibliotecas de drivers e extensões e/ou substituições das próprias bibliotecas e classes principais do CodeIgniter.

application/libraries/MY_email.php application/core/MY_log.php

Os arquivos acima devem ser renomeados respectivamente para o seguinte:

application/libraries/MY_Email.php application/core/MY_Log.php

Controladores:

application/controllers/welcome.php -> application/controllers/Welcome.php

Modelos:

application/models/misc_model.php -> application/models/Misc_model.php

Como posso fazer isso com linha de comando?

obrigado ,

Responder1

Com o Bash 4, primeiro habilite opções adicionais de globbing:

shopt -s extglob

Agora certifique-se de chamar isso apenas nas pastas que contêm os arquivos PHP que você deseja renomear. Ele procurará .phparquivos recursivamente.

for f in **/*.php; do 
  fn=$(basename "$f") # remove directory name
  Fn=${fn^}           # uppercase first letter
  echo mv -- "$f" "$(dirname "$f")/$Fn"  # combine both
done

Para os MY_arquivos, você pode precisar de outra execução:

for f in **/MY_*.php; do
  fn=$(basename "$f")
  Fn=${fn#MY_}     # remove MY_ from filename
  Fn="MY_${Fn^}"   # uppercase first letter and add MY_ again
  echo mv -- "$f" "$(dirname "$f")/$Fn"
done

Remova echoesses scripts para realizar a renomeação.

Responder2

Use um pequeno utilitário chamado mmv. Você pode colocar a primeira letra em maiúscula da seguinte maneira:

mmv "[a-z]*\.*" "#u1#2.#3"

E para o segundo caso que você menciona ( MY_log.php), você poderia resolver da seguinte forma:

mmv "*_[a-z]*.php" "#1_#u2#3.php" 

ou:

mmv "*_[a-z]*" "#1_#u2#3"

informação relacionada