Estou tentando copiar vários diretórios contendo jogos do MS-DOS de um Linux para um computador Windows. No entanto, estou recebendo um [WinError 267] The directory name is invalid
.
Aqui está uma lista de alguns desses diretórios:
$ ls -d *:* | sort -R | head
Commander Keen 2: The Earth Explodes/
1942: The Pacific Air War/
Super Solvers: Treasure Galaxy/
Life and Death 2: The Brain/
Deja Vu 2: Lost In Las Vegas/
Hard Drivin' 2: Drive Harder/
RoboMaze 2: The Lobby/
Dune 2: The Building of a Dynasty/
Blake Stone: Planet Strike/
Star Trek: First Contact/
Suspeito que :
esses nomes de diretório estejam causando esse erro, porque são caracteres inválidos nos nomes de arquivos do Windows .
No entanto, como não posso garantir que :
seja o único caractere inválido usado, estou procurando uma maneira de renomear recursivamente todos os arquivos e diretórios para nomes de arquivos válidos do Windows, substituindo os caracteres inválidos por válidos.
Qual comando do Linux me permite fazer isso?
Recomendo o
rename
comando. Instale através de:rename
usa Perl para fazer comandos de substituição poderosos, mas neste caso uma substituição simples de regex servirá - algo como:O acima substituirá os caracteres dentro dos colchetes pelo sinal de menos. Os
g
meios substituem todos eles, não apenas a primeira ocorrência. Se você quiser algo mais complexo, você pode substituir alguns caracteres por menos e alguns por sublinhados, por exemplo:rename 's/[<>:]/-/g; s/["\\|\?*]/_/g;' *
O acima apenas corrigirá arquivos e diretórios no diretório atual . Para corrigir recursivamente subdiretórios e arquivos também, use
find
:No exemplo acima,
find
será executadorename
para cada item dentro ou sob o diretório atual, fazendo uma busca em profundidade.