Что означает \L$2 в инструменте переименования perl?

Как я вижу в этом сценарии. Он просто проверяет, включен ли sudo, вот и все..

true просто возвращает true.

Таким образом, в этом случае, если им нужно запустить какую-либо команду с помощью sudo, он сначала проверяет при запуске, запрашивая пароль только один раз.

Условие работает следующим образом :Если sudo правильно выполняет команду true, она вернет true для условия if,тогда sudo включен и пользователь ввел пароль правильно, иначе вы ввели неправильный пароль или sudo не включен, сценарий не должен продолжаться.

Другим командам не нужно спрашивать пароль sudo, потому что ваша аутентификация прошла успешно с первого раза (но это зависит от конфигурации sudo, поэтому эти скрипты сильно зависят от конфигурации среды)

Это также демонстрирует эхо-пароль. сценарий оболочки больше не будет запрашивать пароль.

0
11.07.2020, 22:06
1 ответ

Первый s/, последний /и неэкранированный /в середине — это оператор замены и разделители, поэтому у нас есть шаблон (.*)\/([^\/]*)и замена $1\/\L$2.

В (.*)\/([^\/]*)первый (.*)\/соответствует всему до последней косой черты, то есть пути перед окончательным именем файла. Последний ([^\/]*)затем соответствует чему угодно, кроме косой черты до конца строки.

В замене $1возвращает то, что соответствует первой группе захвата в скобках, это и есть путь. Затем \Lпереводит в нижний регистр следующую часть, вторую захваченную группу $2или имя файла.

Конечным результатом здесь является то, что строчные буквы применяются только к последней части имени файла, поэтому, например. dir/OTHERDIR/FOO.txtпревращается в dir/OTHERDIR/foo.txt, а не в dir/otherdir/foo.txt. Прямое переименование последнего не сработает, так как dir/otherdir, вероятно, не существует.


Однако... я думаю, ты мог бы просто бежать:

find. -depth -execdir rename 'y/A-Z/a-z/' {} +

"$(pwd)"(или, проще говоря,"$PWD")работает только для того, чтобы заставить findсоздавать абсолютные пути вместо относительных, но в этом нет необходимости. -execdirзапускает renameотдельно в каждом каталоге, а не все на основном уровне, избавляясь от проблемы работы с полными путями. А {} +вместо {} \;позволяет findдавать более одного файла при каждом вызове переименования.

Хотя обратите внимание, что все это, вероятно, работает только для 26 букв ASCII,не для остальных символов, встречающихся в реальных языках (, например. атри ).

1
18.03.2021, 23:20

Теги

Похожие вопросы