Estou trabalhando na conversão de um site. Os arquivos que foram vinculados e servidos no servidor da Web não diferenciam maiúsculas de minúsculas. Mas fiz um despejo do site no meu sistema Linux e estou escrevendo scripts para migrar dados. O problema é que estou enfrentando problemas de distinção entre maiúsculas e minúsculas entre as seqüências de links nas páginas e as palavras reais no sistema de arquivos.
Por exemplo, uma página pode ter um link como <a href='/subfolder/PageName.asp'>
o arquivo real /subfolder/pagename.asp
. Da mesma forma com imagens - <img src='spacer_sm.gif'>
pode ser Spacer_Sm.gif
.
Então, meu pensamento é alterar todos os nomes de diretório e arquivos para seus equivalentes em minúsculas para o download do site. Como faço isso (e pode haver uma maneira melhor?)
Mesmo se houver comandos unix com opções que não fazem distinção entre maiúsculas e minúsculas, estou usando php, portanto nem todos os comandos do sistema de arquivos têm opções para diferenciação entre maiúsculas e minúsculas.
fonte
Respostas:
Não sei se o seu sabor unix tem um
rename
. Muitos Linux têm, e fazem parte de um pacote perl, se você procurar um repositório.Versão acima com
realmente não executa a ação, mas apenas imprime o que seria feito. Você omite o -n para fazer isso de verdade.
fonte
'y/[A-Z]/[a-z]/'
parte?rename
faz parte de umperl
pacote, acho que o perl, mas o padrão também é usadosed
, e talvezAWK
também. Eu só seised
bem quieto. Traduzoy
paratranslate
oumap
, mas não sei de onde o personagem se origina.rename
é um script perl.Zsh
Explicações:
zmv
renomeia os arquivos que correspondem a um padrão de acordo com o texto de substituição fornecido.-o-i
passa a-i
opção para cadamv
comando sob o capô (veja abaixo). No texto de substituição,$1
,$2
, etc, são os grupos entre parênteses sucessivas no padrão.**
significa todos os (sub) * diretórios, recursivamente. A final(/)
não é um grupo entre parênteses, mas um qualificador global que significa corresponder apenas aos diretórios.${2:l}
converte$2
para minúsculas.Renomear Perl
Aqui eu uso o script de renomeação do Perl que o Debian e o Ubuntu
/usr/bin/prename
disponibilizam (normalmente também disponíveisrename
). Com bash ≥4 ou zsh:Com outras conchas:
Portátil
Recursivamente:
O uso de
-depth
garante que os diretórios profundamente aninhados sejam processados antes de seus ancestrais.fonte
Não funcionou na seguinte estrutura de diretórios:
Aqui está um exemplo que funciona:
Para uma explicação sobre
b
ee
vars:Em seguida, use a seguinte sequência de teclas: /,,Enterbb
fonte
A resposta aceita não funcionou para mim, pois tentou alterar todos os diretórios de uma só vez. Encontrei outra solução no stackexchange muito semelhante à portátil do Gilles acima: da Baramin -
/programming/4268591/unix-rename-files-directories-to-uppercase
Eu copiei aqui:
Para o qual eu mudei o comando tr para ie: sed s / cat / dog / g
Agradeço a Baramin no link acima.
fonte