Como adicionar extensões a vários arquivos usando o conteúdo de cada arquivo?

Como adicionar extensões a vários arquivos usando o conteúdo de cada arquivo?

Tenho mais de 10.000 arquivos que não possuem extensões de versões mais antigas do Mac OS. Eles estão extremamente aninhados na estrutura de arquivos e também possuem todos os tipos de formatação e caracteres estranhos. Eles não têm mais tipos de arquivo ou códigos de criador anexados a eles. Muitos desses arquivos possuem texto que me permite determinar extensões (por exemplo, Word.Document.8 está no texto de cada arquivo criado por essa versão do Word).

Encontrei um script que parece funcionar para um desses tipos de arquivo por vez, mas apaga partes dos nomes dos arquivos após caracteres nefastos, o que não é bom.

find . -type f -not -name "*.*" -print0 |\
    xargs -0 file |\
    grep  'Word.Document.8' |\
    sed 's/:.*//' |\
    xargs -I % echo mv % %.doc

Devo limpar primeiro os caracteres nos nomes dos arquivos ou lidar programaticamente com os do script para deixá-los iguais? Contanto que eu não perca nenhuma informação dos nomes dos arquivos, não vejo problema em limpar barras e outros caracteres problemáticos. Além disso, se eu limpar os nomes dos arquivos, é provável que haja duplicatas, portanto, qualquer script de limpeza teria que adicionar algo como "-1" antes da extensão para garantir que nada se perdesse.

Não estou preso a esse script, mas é compreensível, o que é um profissional. O Mac OS X 10.6 está instalado neste servidor de arquivos, mas tenho acesso a todas as versões recentes do OS X.

Responder1

Ainda não tenho 100% de certeza de que entendi a pergunta, mas aqui estão algumas idéias.

  1. sed 's/:.*//'irá deturpar qualquer nome de arquivo que contenha dois pontos. Dois pontos é um caractere legal de nome de arquivo no Mac? Caso contrário, isso não será um problema para você. Caso contrário, considere fazer sed 's/: Word.Document.8$//'ou. sed 's/: [^:]*$//'.
  2. O mvcomando gerado por xargsparece um problema. Tentar
    xargs -I % sh -c 'echo mv "%" "%.doc"'.

Responder2

A segunda pergunta é como altero o script para que ele procure mais de um tipo de arquivo ao mesmo tempo e dê a cada um a extensão adequada?

Aqui estão algumas dicas para você começar:

sed -e '/Word\.Document\.8/s/algo/algo mais/;s/outro/Ainda outra/'\
    -e '/Excel\.Planilha\.8/s/algo 2/outra coisa 2/;s/mais 2/mais 2/'\
    ...

ou

estranho'
      /Word\.Documento\.8/ {
            comandos awk para Word
      }
      /Excel\.Planilha\.8/ {
            comandos awk para Excel
      }
          
'

informação relacionada