rename ' -f and /[A-Z][^.]*$/ and s/\.[^.]+$/\L$&/' *
rename ' -f and s/\.[^.]*[A-Z][^.]*$/\L$&/' *
Нам нужно понять, что под капотом rename
— это всего лишь код Perl
.Думайте об этом так: подстановочный знак *
передает имена этому коду в цикле
, и над каждым из этих имен мы выполняем следующие действия:
$_
) — это обычный файл (оператор проверки файла -f
имя файла, если имя файла опущено, по умолчанию используется значение $_
) : Чтобы переименовать
не подумал, что -f
, который мы хотим для нашего файла-теста, является опцией, мы используем пробел перед -f
, чтобы предотвратить такая возможность!!! /[AZ][^.]*$/
Это смотрит на непрерывный ряд неточечных символов, видимых с конца имени файла. чтобы утверждать, что в расширенной части имени файла присутствует хотя бы одна прописная буква. Может случиться так, что о расширении не может быть и речи. Об этом факте позаботятся на следующем шаге, где мы ищем литерал .
в имени файла. s/\.[^.]+$/\L$&/
изолирует полную часть расширения в текущем имени файла, глядя с конца имени файла и глядя влево и захватывая все не-точки [^.]+
символов до литерала \.
.\L$&
превратит все прописные буквы в нижний регистр в соответствующем тексте. s///
по проверке верхнего регистра в расширении. m//
и s///
обычно запускаются для прикрепленной строки с помощью оператора =~
, например, $var =~ m/[AZ]+/
$filenm =~ s/ABC/DEF/
. Но в случае, если рассматриваемая переменная оказывается $_
, тогда мы можем обойтись без =~ и написать просто m/[AZ]+/
s/ABC/DEF/
будет означать, что переменная, с которой работают эти регулярные выражения, — это $_
. Кроме того, мы можем обойтись без m
в случае m//
, когда разделителями являются косые черты. Однако нам это нужно в случае, скажем, m{}
m||
и т. д. Это очень распространенная идиома в стиле Perl
. Если вы хотите иметь возможность использовать python только для себя, не портя системный питон, обратите внимание на продукт под названием Anaconda от Continuum. http://Continuum.io/downloads эта установка python и т.д. будет установлена в ваш домашний каталог и изменит пути, поэтому вы не устанавливаете python в свои системы и, возможно, испортите вашу систему. Вы также можете создавать виртуальные среды, и среды Conda из этих опций позволяют вам попробовать что-то, а если вам это не нравится, просто сдуйте среду.
CentOS 7.x является производным от Red Hat Enterprise 7.x, который предназначен для стабильный . Это неизбежно означает, что программы, доступные в репозиториях, какое-то время были протестированы. Вы можете увидеть это из описания на их веб-сайте:
CentOS Project - это проект бесплатного программного обеспечения, управляемый сообществом, направленный на создание надежной экосистемы с открытым исходным кодом. Для пользователей мы предлагаем согласованную управляемую платформу , которая подходит для широкого спектра развертываний. Для сообществ с открытым исходным кодом мы предлагаем прочную, предсказуемую основу , на которой можно опираться, а также обширные ресурсы для создания, тестирования, выпуска и поддержки их кода.
Если вам нужен «передовой» код, вы можете использовать Fedora . Fedora преследует разные цели:
Проект Fedora - это глобальное партнерство членов сообщества свободного программного обеспечения. Проект Fedora спонсируется Red Hat, которая инвестирует в нашу инфраструктуру и ресурсы, чтобы поощрять сотрудничество и инкубировать новые инновационные технологии . Некоторые из этих технологий могут быть позже интегрированы в продукты Red Hat. Они разрабатываются в Fedora и с самого начала производятся под свободной лицензией с открытым исходным кодом, поэтому другие сообщества и проекты свободного программного обеспечения могут свободно изучать, принимать и изменять их.
Конечно, есть компромиссы, но нельзя иметь одновременно «стабильную» и «новую».
Есть ли единое мнение о том, что здесь следует делать?
Да, не изменяйте управляемую системой установку Python вручную (запуская pip) - смотрите Каковы риски запуска 'sudo pip'? Для более глубокого обсуждения этого вопроса, пожалуйста, прочитайте выпуск 1668 Default to --user pip и другие связанные с ним выпуски.
Наиболее распространенные решения:
Теоретически другим возможным решением было бы использование опции --target
в pip и установка PYTHONPATH
переменной окружения. Однако опция --target
имеет множество (на данный момент 12) проблем.
Взгляните на этот вопрос. В нем говорится об установке pip в другой каталог. Это позволит вам поддерживать установку rpm и иметь последнюю версию. Я бы, вероятно, удалил версию rpm, если вы не планируете ее использовать.
Не лучше ли устанавливать pip и модули из RPM? Может быть, просто установить Python из RPM, а затем установить все модули из pip (чтобы ни один из модулей Python не был из RPM и полностью управлялся pip)?
Можно установить pip и другие модули Python из диспетчера пакетов вашей ОС. Возможно, у вас больше не будет выбора, поскольку многие системные компоненты зависят от Python, и даже в минимально установленной версии ОС вы обнаружите, что модули Python + Python установлены по умолчанию.
Поэтому всякий раз, когда вы чувствуете, что вам нужно обновить «общесистемную» версию pip или любого из модулей Python, но не хотите вмешиваться в файлы, управляемые менеджером пакетов, вы должны сделать следующее:
Следующие инструкции относятся к производной от RHEL ОС, а версия Python, доступная в то время, была 2.7.x. Вам нужно будет настроить PYTHONPATH в соответствии с установленной версией Python.
Убедитесь, что установлена версия диспетчера пакетов python-pip. например yum -y установить python-pip
.
Создайте сценарий profile.d для настройки переменной среды PYTHONPATH:
# Убедитесь, что PYTHONPATH настроен на использование /usr/local/lib*/python2.7/site-packages
read -r -d '' pythonpath_profile_script << 'EOF'
pythonpathmunge () {
case ": $ {PYTHONPATH}:" in
*: "$ 1": *) {{1 }} ;;
*)
если ["$ 2" = "после"]; тогда
PYTHONPATH = $ PYTHONPATH: $ 1
else
PYTHONPATH = $ 1: $ PYTHONPATH
fi
esac
} {{1 }}
pythonpathmunge /usr/local/lib/python2.7/site-packages
pythonpathmunge /usr/local/lib64/python2.7/site-packages
export PYTHONPATH { {1}} EOF
echo "Создание скрипта профиля /etc/profile.d/pythonpath.sh:"
echo "$ {pythonpath_profile_script}"> / etc / profile .d / pythonpath.sh
chown root.root /etc/profile.d/pythonpath.sh
chmod -v 0644 /etc/profile.d/pythonpath.sh
source /etc/profile.d/pythonpath.sh
hash -r
Затем вы можете выбрать установку последней версии pip или любого другого модуля python с помощью:
pip install --upgrade << НАЗВАНИЕ МОДУЛЯ PYTHON >> --ignore-installed --install-option = "- prefix = / usr / local" --log / var / log / << НАЗВАНИЕ МОДУЛЯ PYTHON >> - install- $ (дата "+% Y% m% d% H% M% S"). log
например
pip install --upgrade pip --ignore-installed --install-option = "- prefix = / usr / local" --log / var / log / pip-install - $ (date "+% Y% m% d% H% M% S "). log
hash -r
# Обратите внимание на использование` hash -r` для обновления хеш-таблицы bash недавно
# исполняемого файла программы. Без этого вы можете обнаружить, что используемая команда 'pip'
# не является той версией, которую вы только что установили.
Это установит запрошенный модуль Python в / usr / local
, где он не будет мешать файлам, управляемым системным диспетчером пакетов. Параметр - ignore-installed
гарантирует, что pip не коснется существующей версии модуля. Кроме того, из-за использования переменной среды PYTHONPATH пути /usr/local/lib*/python2.7/site-packages
будут использоваться до любых пакетов, установленных системой. т.е.
[root@localhost ~]# python
Python 2.7.5 (default, Sep 15 2016, 22:37:39)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print '\n'.join(sys.path)
/usr/local/lib64/python2.7/site-packages <---
/usr/local/lib/python2.7/site-packages <---
/root
/usr/lib64/python27.zip
/usr/lib64/python2.7
/usr/lib64/python2.7/plat-linux2
/usr/lib64/python2.7/lib-tk
/usr/lib64/python2.7/lib-old
/usr/lib64/python2.7/lib-dynload
/usr/lib64/python2.7/site-packages
/usr/lib/python2.7/site-packages
>>>
Наконец, по крайней мере, в CentOS / RHEL, путь / usr / local / bin
находится перед любыми другими системными двоичными путями в переменной среды PATH, и, следовательно, это также гарантирует, что любые новые двоичные файлы установленные в / usr / local / bin имеют приоритет над установленными в системе. то есть
[root@localhost ~]$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin