Como renomear recursivamente arquivos / pastas para tornar seus nomes compatíveis com o Windows?

11

Eu tenho vários arquivos em uma caixa do Ubuntu, que têm vários caracteres nos nomes de arquivos que o Windows não aceita (principalmente ":" e "*", mas possivelmente outros).

Qual é a maneira mais simples de renomear tudo e mudar para uma máquina Windows? Não há problema em substituir esses caracteres por algo como "[dois-pontos]" e "[asterisco]".

RomanSt
fonte
1
Você deve evitar esses nomes mesmo no Linux (especialmente *).
Cyrus
4
@cYrus Depende de como você lida com arquivos. Eu imagino que seja apenas um problema com scripts e conchas. Estou no OS X e o único personagem proibido é :, o que é ruim o suficiente. Nomear documentos após o conteúdo é útil e, se o nome de um artigo terminar com uma pergunta, o nome do arquivo também deve ser.
Daniel Beck
O @cYrus e eu fazemos, no meu software, mas alguns foram escritos por pessoas que não o fazem. Por exemplo, o qmail usa: em quase todos os nomes de arquivos criados.
RomanSt
@ Daniel Beck: Claro, mas, infelizmente, ter um sistema de arquivos que suporte esses nomes não é suficiente, pois você pode usar programas que mexem com tudo. Eu nem uso espaços.
Cyrus
2
@Steven boa pergunta! Eu acho que o Windows seria um pouco mais útil, pois pode acontecer que alguém receba os arquivos no Windows e precise corrigi-los nessa plataforma.
Peltier

Respostas:

4

Dê uma olhada no Glindra renomear e desintoxicação .

Os utilitários de arquivo Glindra podem ser instalados no Windows ou Linux. Exemplos de limpeza de nomes de arquivos no Windows:

rena *.* -portable

rena *.* -safe
  • -safe
    Mapeia traços (hífens) para sublinhados.
    Recolhe espaços.
    Mapeia caracteres problemáticos como * ?: [] "<> | () {} para sublinhar.
  • -portable
    Executa as mesmas operações de limpeza que -safe e, além disso:
    mapeia todos os caracteres de 8 bits da metade superior do alfabeto latino 1 para caracteres razoáveis ​​de fallback de 7 bits.
    Mapeia os caracteres de aspas simples '' to para sublinhar.

Fonte: Corrigindo nomes de arquivos Unix / Linux / POSIX: caracteres de controle (como nova linha), traços iniciais e outros problemas

Pausado até novo aviso.
fonte
Essa página mostra uma 404. Cópia em cache do Google .
Daniel Beck
Esse é um discurso incrível de David Wheeler! Especialmente depois que eu tinha batido meu teclado depois de tentar cd em um diretório que o JungleDisk chamou "~ \ irina". Quer adivinhar se a conclusão de tabulação trabalhou com ele ...?
RomanSt
1
Desintoxicação é para tornar os arquivos do Windows compatíveis com Unix, e não o contrário.
endolith 20/02
3
@DennisWilliamson - Parece que o glindra (para Windows) não pode renomear caracteres com nomes de arquivos inválidos. G:\spc>rena.exe -safe -portable *.txtsaídas[FATAL-ERROR] Filename syntax error: aa:a.txt
Steven
1
Observe a mudança na sintaxe ao acessar o Linux, ou seja rena '*.*' -portable, e se você quiser recursiva, use algo como rena '***/*.*' -portableno Linux. E eu acredito que a renomeação deve ser feita no Linux, não no Windows.
19415 holroy
4

Tente Recuva .

É o único utilitário do Windows que encontrei que lida com nomes de arquivos não compatíveis com o Windows.

Habilite a verificação de arquivos não excluídos (para recuperação de discos danificados ou reformatados) e verifique sua pasta. Na restauração, ative Restaurar estrutura da pasta . O Recuva efetivamente "copia" o diretório inteiro para outro local enquanto "santifica" os nomes de arquivos hostis.

Steven
fonte
1

Sem estar no Linux e sem testar nada, acredito que se poderia usar one-liners como os abaixo.

Para alterar um caractere:

find . -type f -exec rename 's/:/\[colon\]/g' {} +
find . -type f -exec rename 's/\*/\[asterisk\]/g' {} +

E, finalmente, para remover todos os caracteres não alfanuméricos:

find . -type f -exec rename 's/[^A-Za-z0-9._]//g' {} +
harrymc
fonte
Note que isso precisa ser ampliada com todos os outros personagens ilegais de janelas, ie<>:"/\|?*
holroy
0

Se seus arquivos já estiverem em um volume NTFS, parece que a execução do chkdisk no Windows "resolve" o problema. Infelizmente, parece que o faz excluindo os arquivos incorretos.

Peltier
fonte
0

Eu consegui com uma combinação das duas primeiras respostas, além de pyRenamer (GUI). No Linux, usei o pyRenamer para recolher espaços nos nomes de pastas (diretórios) - substituindo espaço por nada - para que os outros programas (renomeação Glindra) funcionem recursivamente (pode-se colocar sublinhados). Nos arquivos, também peguei alguns caracteres ou palavras aceitáveis ​​pelo Windows para economizar espaço e, da mesma forma, reduzi os espaços nos nomes de arquivos. Em seguida, executei o rena para remover caracteres que não são do Windows, salvos em uma unidade flash e usei o Recuva para 'restaurar' uma pasta no Windows. Recuva indica se um caminho de arquivo é muito longo (e também remove caracteres que não são do Windows). Ainda não encontrei uma ferramenta que verifique o caminho dos nomes de arquivos para ver se eles estão abaixo do limite máximo de 255 do Windows (ou diga 240 para permitir uma margem de manobra).

Vitex
fonte