Pathlib — манипуляция путями, создание и удаление папок и файлов

Неважно кто вы, разработчик ПО, специалист по данным, менеджер ИТ-инфраструктуры или просто любитель компьютеров  —  вам нужно знать, как пользоваться терминалом в Linux и macOS. Но сложность в том, что необходимо запомнить слишком много команд. И если у вас нет чудо-памяти, время от времени приходится искать в Интернете ту или иную команду.

Добавление пути в пользовательскую переменную Path

Для добавление пути, заданного аргументом командной строки, скрипт выполняет следующие действия:

  • Считывает текущее значение переменной Path из реестра (пользовательские переменные находятся здесь HKCU\Environment\Path), основан на Чтение из реестра в скрипте WSH.
  • Проверяет, возможно, этот путь уже добавлен, в этом случае скрипт завершает свою работу.
  • Добавляет путь к значению переменной Path.
  • Сохраняет итоговое значение вызовом SETX. Почему именно через SETX, а не через сохранение значения обратно в реестр? Разница в том, что изменение, сделанное через SETX, начинает работать сразу (для новых процессов, конечно), а изменения, сохранённые через реестр, начнут работать только после выхода-входа пользователя.

Код скрипта user_path_:

var wsh_shell = («»); var path = wsh_((0)); var v = «»; try { v = wsh_(«HKCU\\Environment\\Path»); } catch ( e ) { } if ( v != «» ) { for ( var i = new Enumerator((«;»)); !(); ()) if ( () == ().toUpperCase() ) (0); if ( () != «;» ) v += «;»; } v += path; if ( wsh_(«setx Path \»» + v + «\»»,0,true) != 0 ) («setx failed.»);

Пример добавления пути к программе nhsms, установленной в профиль пользователя, из командной строки:

cscript //nologo user_path_ «%localappdata%\nhsms»

Работа с переменными в shell

В последнем примере Мефодий воспользовался подсмотренным у Гуревича приёмом: присвоил некоторое значение переменной окружения в командной строке перед именем команды. Командный интерпретатор, увидев «=» внутри первого слова командной строки, приходит к выводу, что это — операция присваивания, а не имя команды, и запоминает, как надо изменить окружение команды, которая последует после. Переменная окружения LC_TIME предписывает использовать определённый язык при выводе даты и времени а значение «C» соответствует «стандартному системному» языку (чаще всего — английскому).

Если рассматривать shell в качестве высокоуровневого языка программирования, его переменные — самые обычные строковые переменные. Записать значение в переменную можно с помощью операции присваивания, а прочесть его оттуда — с помощью операции подстановки вида $переменная:

[[email protected] methody]$ A=dit [[email protected] methody]$ C=dah [[email protected] methody]$ echo $A $B $C dit dah [[email protected] methody]$ B=» » [[email protected] methody]$ echo $A $B $C dit dah [[email protected] methody]$ echo «$A $B $C» dit dah [[email protected] methody]$ echo ‘$A $B $C’ $A $B $CПример 10. Подстановка значений переменных

Читайте также:  Что делать если iPhone не может скачать новую версию iOS

Как видно из примера, значение неопределённой переменной (B) в shell считается пустым и при подстановке не выводится никаких предупреждений. Сама подстановка происходит, как и генерация имён, перед разбором командной строки, набранной пользователем. Поэтому вторая команда echo в примере получила, как и первая два параметра («dit» и «dah»), несмотря на то, что переменная B была к тому времени определена и содержала разделитель-пробел. А вот третья и четвёртая команды echo получили по одному параметру. Здесь сказалось различие между одинарными и двойными кавычками в shell: внутри двойных кавычек действует подстановка значений переменных.

Переменные, которые командный интерпретатор bash определяет после запуска, не принадлежат окружению, и, стало быть, не наследуются дочерними процессами. Чтобы переменная bash попала в окружение, её надо проэкспортировать командой export:

[[email protected] methody]$ echo «$Qwe — $LANG» — ru_ [[email protected] methody]$ Qwe=»Rty» LANG=C [[email protected] methody]$ echo «$Qwe — $LANG» Rty — C [[email protected] methody]$ sh $ echo «$Qwe — $LANG» — C $ exit [[email protected] methody]$ echo «$Qwe — $LANG» Rty — C [[email protected] methody]$ export Qwe [[email protected] methody]$ sh $ echo «$Qwe — $LANG» Rty — C $ exitПример 11. Экспорт переменных shell в окружение

Здесь Мефодий завёл новую переменную Qwe и изменил значение переменной окружения LANG, доставшейся стартовому bash от программы login. В результате запущенный дочерний процесс sh получил изменённое значение LANG и никакой переменной Qwe в окружении. После export Qwe эта переменная была добавлена в окружение и, соответственно, передалась sh.

Новая переменная $PATH macOS для текущего пользователя

Для того чтобы раз и навсегда добавить новую переменную в $PATH macOS для текущего пользователя необходимо выполнить несложные действия в терминале.

Найдите в меню Launchpad приложение «Терминал» и запустите его. Введите команду для перехода в домашний каталог:

cd $home

  • После чего приступите к редактированию файла .bash_profile:

nano ~/.bash_profile

  • Добавьте ваш путь к команде или скрипту:

PATH=$PATH:/путь_папка/к/команде

  • Сохраните изменения с помощью нескольких комбинации клавиш
    • CTRL O
    • CTRL X

Полностью закройте приложение Терминал и снова запустите его, проверьте добавилась ли ваша новая переменная в $PATH:

$PATH

Как добавить директорию в PATH

PATH — это системная переменная, содержащая список директорий, в которых ОС будет искать исполняемый файл при вызове команды из консоли.

Читайте также:  3.Симметричный подход: Bash и glob star

В Windows 10 можно добраться до настройки PATH так: Этот компьютер → Свойства → Дополнительные параметры системы → Дополнительно → Переменные среды. Или вызовом «Изменение переменных среды текущего пользователя» в результатах поиска.

В окошке «Переменные среды» в блоке «Переменные среды пользователя %USERNAME%» находим строку PATH, выделяем кликом, жмем кнопку «Изменить…» и в появившемся окошке нажимаем «СОздать» для добавления ещё одного элемента. В самом элементе нужно вписать путь к папке Sublime Text (путь к файлу , который должен лежать в папке программы). В моем случае получилось так:

c:\Program Files\Sublime Text 3\

После перезапуска консоли можно наслаждаться командой subl.

Зачем использовать модуль Pathlib?

Если вы некоторое время работали с языком Python, у вас может возникнуть вопрос. Зачем нужен модуль Pathlib, когда уже есть модули os, , glob и прочие? Это хороший вопрос. Давайте попробуем ответить на него, разобрав следующий пример.

Допустим, мы хотим создать файл под названием «output/» в текущем рабочем каталоге. Следующий код пытается сделать это с помощью модуля Также используются функции и

Python import os outpath = ((), ‘output’) outpath_file = (outpath, »)

1234 import os outpath = .join(os.getcwd(), ‘output’)outpath_file = .join(outpath, »)

Альтернативный способ:

Python outpath_file = (((), ‘output’), «»)

1 outpath_file = os.pathjoin(.join(os.getcwd(), ‘output’), «»)

Хотя код работает, он выглядит несколько странно, плохо читается, в нем сложно уловить суть. Представьте, как данный код выглядел бы, если бы мы хотели создать новый файл внутри глубоко расположенной директории.

Данный код можно переписать, используя модуль Pathlib:

Python from pathlib import Path outpath = () / ‘output’ / »

12 from pathlib import Pathoutpath = Path.cwd() / ‘output’ / »

Такой формат проще укладывается в голове. В Pathlib функция () используется для получения текущего рабочего каталога, а оператор / используется вместо для объединения частей пути в составной объект пути.

Шаблон вложенности функций в модуле заменяется классом Path модуля Pathlib, что представляет путь через объединение методов и атрибутов. Умная перегрузка оператора / делает код читабельным и простым в обращении.

Другое преимущество метода, предоставляемого модулем Pathlib, заключается в том, что объект Path создается вместо строкового представления пути. У этого объекта есть несколько удобных методов, что имеют значительное преимущество перед работой с необработанными строками, которые представляют пути.

Просмотр содержимого файла

Через терминал можно не только просматривать содержимое текстового файла, но и проводить анализы, например сортировать и менять порядок строк по содержанию, подсчитывать количество строк, слов, символов, и выделить столбцы, если это табличный файл. Рассмотрим их в действии:

Читайте также:  Выпущена iOS 12.2 beta 5 для разработчиков от Apple

# grep: фильтрация по строкам grep 455 # вывести строку, где есть 455 # cut: отображение столбцов cut -f 3 # вывести только третий столбец cut -f 2-3 # вывести 2-ой и 3-ий столбец cut -c 9-19 # вывести от 9-ти до 19-ти символов каждой строки cut -f 1 -d ‘;’ # в файле использовать ‘;’ в качестве разделителя вместо tab # awk: то же, что и cut, но имеет ещё больше разделителей, фильтров и он более сложный в вычислении awk ‘{print $3}’ # вывести 3-ий столбец awk ‘{print $2 «, » $3}’ # вывести 2-ой и 3-ий столбец, и разделить запятой awk ‘{print $2 + $3}’ # вывести сумму 2-го и 3-го столбца awk ‘length($0) > 20’ # вывести все строки длиннее 20 символов awk ‘$2 > 100′ # вывести строки, в которых значение второго столбца больше 100 # wc wc # вывести количество строк, слов и символов в текстовом файле ls -1 | wc # вывести количество строк, слов и символов каждого файла в текущем каталоге # sort: сортировка строк по алфавиту sort # сортировка строк файла sort -r # сортировка в обратном порядке sort -R # сортировка в случайном порядке sort -t $’\t’ -k 3n,3 # сортировать строки по числовому значению третьего столбца # uniq: отображает неповторяющиеся и повторяющиеся строки файла uniq # опускает повторяющиеся строки uniq -d # выводит только повторяющиеся строки uniq -u # выводит только те строки, у которых нет повторов uniq -c # выводит количество повторов для каждой строки

Надеюсь вам понравится эта шпаргалка!

  • Как писать Bash-однострочники для клонирования и управления GitHub/GitLab репозиториями
  • Автоматизированное семантическое управление версиями с помощью GitVersion
  • Основы Git за 5 минут

Читайте нас в Telegram, VK и

Перевод статьи Guillermo Barreiro: The Essential Bash Cheat Sheet

Установка и удаление пользовательских переменных

Отредактируйте , в вашей домашней директории, добавив команду export, для экспортирования нужной переменной. Затем выполните команду source для применения изменений. Создадим, например, переменную CD:

Добавьте такую строчку (o, затем вставить, затем Esc и:wq):

export CD=»This is Losst Home»

Теперь осталось обновить конфигурацию:

Установка и удаление пользовательских переменных

source .bashrc $ echo $CD

Для удаления этой переменной просто удалите ее

Теперь добавим переменную окружения с _profile. Эта переменная, как вы уже знаете будет доступна только при удаленном входе:

vi .bash_profile

Добавьте строчку:

export VAR2=»This is Losst Home»

И выполните эти команды, чтобы применить изменения и проверить добавление переменной:

source .bash_profile $ echo $VAR2

Установка и удаление пользовательских переменных

Переменная недоступна, так как вы создали локальную терминальную сессию, теперь подключитесь по ssh:

ssh [email protected] $ echo $VAR2

Удалить эту переменную окружения можно так же как и в предыдущем случае, удалив ее из файла.

Замечание: Эти переменные доступны всегда, но не для всех пользователей.