Je travaille sur une conversion de site Web. Les fichiers tels qu'ils étaient liés et servis à partir du serveur Web n'étaient pas sensibles à la casse. Mais, j'ai fait un vidage du site sur mon système Linux et j'écris des scripts pour migrer les données. Le problème est que je rencontre des problèmes de respect de la casse entre les chaînes de liens dans les pages et la casse réelle des mots sur le système de fichiers.
Par exemple, une page peut avoir un lien similaire à celui <a href='/subfolder/PageName.asp'>
du fichier réel /subfolder/pagename.asp
. De même avec les images - <img src='spacer_sm.gif'>
peut-être Spacer_Sm.gif
.
Donc, ma pensée est de changer tous les répertoires et noms de fichiers en leurs équivalents minuscules pour le téléchargement du site. Comment puis-je faire cela (et pourrait-il y avoir une meilleure façon?)
Même s'il existe des commandes Unix qui ont des commutateurs insensibles à la casse, j'utilise php, donc toutes les commandes du système de fichiers n'ont pas d'options de sensibilité à la casse.
la source
Réponses:
Je ne sais pas si votre saveur unix a un
rename
. De nombreux Linux l'ont fait, et il fait partie d'un paquet perl, si vous recherchez un référentiel.Version ci-dessus avec
n'effectue pas vraiment l'action, mais n'imprime que ce qui serait fait. Vous omettez le -n pour le faire pour de vrai.
la source
'y/[A-Z]/[a-z]/'
partie?rename
fait partie d'unperl
package, je suppose que Perl, mais le modèle est également utilisésed
, et peut-êtreAWK
aussi. Je ne connaissed
bien que le calme. Je traduisy
entranslate
oumap
, mais je ne sais pas d'où vient le personnage.rename
c'est un script perl.Zsh
Explications:
zmv
renomme les fichiers correspondant à un modèle en fonction du texte de remplacement donné.-o-i
passe l'-i
option à chaquemv
commande sous le capot (voir ci-dessous). Dans le texte de remplacement,$1
,$2
, etc, sont les groupes successifs dans le parenthésées modèle.**
signifie tous les répertoires (sous) *, récursivement. La finale(/)
n'est pas un groupe entre parenthèses mais un qualificatif glob qui signifie ne correspondre qu'aux répertoires.${2:l}
convertit$2
en minuscules.Renommer Perl
Ici, j'utilise le script de changement de nom Perl
/usr/bin/prename
fourni par Debian et Ubuntu (généralement également disponiblerename
). Avec bash ≥4 ou zsh:Avec d'autres coquilles:
Portable
Récursivement:
L'utilisation de
-depth
assure que les répertoires profondément imbriqués sont traités avant leurs ancêtres.la source
Il n'a pas fonctionné sur la structure de répertoires suivante:
Voici un exemple qui fonctionne:
Pour une explication sur
b
ete
vars:Utilisez ensuite la séquence de touches suivante: /,,Enterbb
la source
La réponse acceptée n'a pas fonctionné pour moi car elle a essayé de changer tous les répertoires à la fois. J'ai trouvé une autre solution sur stackexchange très similaire à celle portable de Gilles ci-dessus: de Baramin -
/programming/4268591/unix-rename-files-directories-to-uppercase
Je l'ai copié ici:
Pour lequel j'ai changé la commande tr en ie: sed s / cat / dog / g
Merci à Baramin au lien ci-dessus.
la source