Я работаю над преобразованием веб-сайта. Файлы, поскольку они были связаны и обслуживались с веб-сервера, были нечувствительны к регистру. Но я сделал дамп сайта в моей системе Linux и пишу скрипты для переноса данных. Проблема в том, что я сталкиваюсь с проблемами чувствительности к регистру между строками ссылок на страницах и фактическим регистром слов в файловой системе.
Например, на странице может быть ссылка, как <a href='/subfolder/PageName.asp'>
у фактического файла /subfolder/pagename.asp
. Аналогично с изображениями - <img src='spacer_sm.gif'>
может быть Spacer_Sm.gif
.
Поэтому я думаю изменить все каталоги и имена файлов на их строчные эквиваленты для загрузки сайта. Как мне это сделать (и может ли быть лучший способ?)
Даже если есть команды unix, которые имеют переключатели без учета регистра, я использую php, поэтому не все команды файловой системы имеют параметры чувствительности к регистру.
источник
Ответы:
Я не знаю, есть ли у твоего unix-аромата
rename
. Во многих Linux есть, и это часть perl-пакета, если вы ищете репозиторий.Над версией с
на самом деле не выполняет действие, а только печатает, что будет сделано. Вы опускаете -n, чтобы сделать это по-настоящему.
источник
'y/[A-Z]/[a-z]/'
частью?rename
это частьperl
пакета, я думаю, Perl, но шаблон используется и вsed
, и, возможно,AWK
также. Я только хорошо знаюsed
тишину. Я перевожуy
наtranslate
илиmap
, но я не знаю, откуда происходит этот персонаж.rename
что это сценарий Perl.Zsh
Пояснения:
zmv
переименовывает файлы, соответствующие шаблону, в соответствии с заданным текстом замены.-o-i
передает-i
опцию каждойmv
команде под капотом (см. ниже). В тексте замены$1
,$2
и т. Д., Есть последовательные заключенные в скобки группы в шаблоне.**
означает все (под) * каталоги, рекурсивно. Финал(/)
- это не группа в скобках, а квалификатор glob, означающий совпадение только с каталогами.${2:l}
преобразует$2
в нижний регистрPerl переименовать
Здесь я использую сценарий переименования Perl, который поставляется вместе с Debian и Ubuntu
/usr/bin/prename
(как правило, также доступенrename
). С bash ≥4 или zsh:С другими снарядами:
портативный
Рекурсивный:
Использование
-depth
гарантирует, что глубоко вложенные каталоги обрабатываются перед их предками.источник
Он не работал со следующей структурой каталогов:
Вот пример, который работает:
Для объяснения
b
иe
Vars:Затем используйте следующую последовательность клавиш: /,,Enterbb
источник
Принятый ответ не работал для меня, поскольку он пытался изменить все каталоги одновременно. Я нашел другое решение для stackexchange, очень похожее на портативное решение от Gilles выше: от Baramin -
/programming/4268591/unix-rename-files-directories-to-uppercase
Я скопировал это здесь:
На что я изменил команду tr на ie: sed s / cat / dog / g
Любая благодарность идет к Baramin по ссылке выше.
источник