Árvore de páginas

A migração de sistemas operacionais, como do Windows para o Linux, é uma tarefa importante para muitas empresas e usuários individuais. No entanto, uma das questões que podem surgir durante esse processo é a diferença na convenção de nomenclatura de arquivos. Enquanto o Windows não faz distinção entre maiúsculas e minúsculas na nomenclatura de arquivos, o Linux é case-sensitive, o que significa que "Arquivo.txt", "ArquiVo.txt" e "arquivo.txt" são tratados como arquivos diferentes. Portanto, para garantir uma transição tranquila e evitar possíveis problemas de compatibilidade, é importante que todos os nomes de arquivos e diretórios estejam em letras minúsculas.

Neste artigo, abordamos a conversão dos nomes dos arquivos e diretórios para apoiar aos que se encontram em uma jornada de migração. 

Desafio: Nomes de arquivos em maiúsculas no Windows

Ao migrar para o Linux a partir do Windows, é comum encontrar diretórios e arquivos que usam letras maiúsculas na nomenclatura. Essa diferença de convenção pode causar confusão e erros em sistemas Linux, onde a distinção entre maiúsculas e minúsculas é rigorosamente aplicada.

Solução: Script para renomear arquivos e diretórios em letras minúsculas

Para enfrentar esse desafio, é possível usar um script simples em shell para renomear todos os diretórios e arquivos em letras minúsculas. Abaixo está um script de exemplo que pode ser usado para realizar essa tarefa:

#!/bin/bash

# Diretório principal a ser verificado
DIR="/totvs/protheus_data"

# Log para registrar as alterações
LOGFILE="/totvs/protheus_data/rename_to_lowercase.log"

# Contar o número total de diretórios
total_dirs=$(find "$DIR" -type d | wc -l)
processed_dirs=0

# Funcao para renomear um diretório para caixa baixa
rename_dir_to_lowercase() {
  local dir="$1"
  local newname="$(echo "$dir" | tr 'A-Z' 'a-z')"
  if [ "$dir" != "$newname" ]; then
    mv "$dir" "$newname" > /dev/null 2>> "$LOGFILE"
    echo "$newname"
  else
    echo "$dir"
  fi
}

# Função para renomear arquivos em caixa alta para caixa baixa e registrar no log
rename_files_to_lowercase() {
  local dir="$1"
  find "$dir" -type f | while read -r file; do
    local newname="$(echo "$file" | tr 'A-Z' 'a-z')"
    if [ "$file" != "$newname" ]; then
      mv "$file" "$newname" > /dev/null 2>> "$LOGFILE"
      echo "Arquivo alterado: $file -> $newname" >> "$LOGFILE"
    fi
  done
}

# Função para percorrer recursivamente os diretórios
traverse_directories() {
  local directory="$1"
  local newname=""
  for item in "$directory"/*; do
    if [ -d "$item" ]; then
      # Renomear o diretório atual
      newname=$(rename_dir_to_lowercase "$item")
      # Renomear arquivos dentro do diretório atual e registrar no log
      rename_files_to_lowercase "$newname"
      # Atualizar a barra de progresso
      processed_dirs=$((processed_dirs + 1))
      percentage=$((processed_dirs * 100 / total_dirs))
      echo -ne "Progresso: $percentage% \r"
      # Recursivamente chamar a função para subdiretórios
      traverse_directories "$newname"
    fi
  done
}

# Iniciar a função de travessia no diretório principal
traverse_directories "$DIR"

# Imprimir uma nova linha para limpar a linha de progresso
echo ""

 Como usar o script:

  • Salve o script em um arquivo com extensão .sh, por exemplo, rename_to_lowercase.sh. No teste realizado, o script foi salvo no diretório /totvs/protheus_data/ usando o editor vim. Você pode usar outros editores, como o nano ou o gedit, se preferir.
  • Dê permissão de execução ao script:

    chmod +x rename_to_lowercase.sh
  • Edite o script para especificar o diretório que deseja verificar e o nome do arquivo de log.
  • Execute o script

    ./rename_to_lowercase.sh

Exemplo da execução do arquivo:


Esse procedimento foi executado em 70GB de protheus_data, neste exemplo.

Em resumo

O script "rename_to_lowercase.sh" irá percorrer o diretório especificado e seus subdiretórios, renomeando todos os diretórios e arquivos para letras minúsculas. As alterações serão registradas no arquivo de log (definido na variável LOGFILE).



  • Sem rótulos