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

2

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

Encontrei um script que parece funcionar para um desses tipos de arquivos por vez, mas apaga partes de nomes de arquivos depois de 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 os caracteres nos nomes dos arquivos primeiro, ou lidar de forma programática com os do script para que eles sejam iguais? Contanto que eu não perca nenhuma informação dos nomes dos arquivos, não vejo problema em limpar barras e outros caracteres com problemas. Além disso, se eu limpar os nomes dos arquivos, provavelmente haverá duplicatas, portanto, qualquer script de limpeza teria que adicionar algo como "-1" antes da extensão para garantir que nada seja perdido.

Não estou preso a este script, mas é compreensível, o que é um profissional. O Mac OS X 10.6 está instalado neste servidor de arquivos, mas eu tenho acesso a qualquer versão recente do OS X.

    
por v8media 18.09.2012 / 23:11

2 respostas

1

Ainda não tenho 100% de certeza de que entendi a pergunta, mas eis alguns pensamentos.

  1. sed 's/:.*//' irá manchar qualquer nome de arquivo que tenha dois pontos. O cólon é um caractere de nome de arquivo legal no Mac? Se não, isso não será um problema para você. Caso contrário, considere fazer sed 's/: Word.Document.8$//' ou. sed 's/: [^:]*$//' .
  2. O comando mv gerado por xargs parece um problema. Experimente xargs -I % sh -c 'echo mv "%" "%.doc"' .
por 20.09.2012 / 00:02
0

2nd question is how do I change the script so that it will look for more than one file type at the same time and give each the proper extension?

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

sed -e '/Word\.Document\.8/s/something/something else/;s/another/yet another/' \
    -e '/Excel\.Sheet\.8/s/something2/something else2/;s/another2/yet another2/' \
    ...

ou

awk '
      /Word\.Document\.8/ {
            awk commands for Word
      }
      /Excel\.Sheet\.8/ {
            awk commands for Excel
      }
          
'
    
por 20.09.2012 / 00:33