Это действительно интеграция с iTerm2. Вместо того, чтобы удалять его, просто сделайте то, что авторы iTerm2 должны были сделать внутри своего скрипта интеграции.
Я подключался по ssh через linux и подтверждаю, что исходное решение оказалось недостаточным. I
Существует последовательность ANSI, на которую будет реагировать iterm, которая работает независимо от того, какая оболочка/ssh активна. Для тех, кто хочет создать свою собственную последовательность: printf '\x1b[1337n'
. Я не знаю, почему сценарий интеграции с оболочкой iterm сам не выполняет этот запрос и не освобождается, если он не размещен в iterm.
В вашем .bashrc (или любой другой оболочке, которую вы используете) должно быть что-то вроде:
test -r ~/.iterm2_shell_integration.bash && . ~/.iterm2_shell_integration.bash
Возможно, без начального теста. Просто измените его на еще более уродливый:
isiterm2.sh && test -r ~/.iterm2_shell_integration.bash && . ~/.iterm2_shell_integration.bash
Исходный скрипт isiterm2.sh (написанный автором iTerm2 gnachman, можно найти здесь на github. Ссылка в приведенном выше блоке кавычек является модификацией исходного скрипта со следующими небольшими изменениями:
Это мой первоначальный неполный ответ
[[ $TERM_PROGRAM == "iTerm.app" ]] && test -r ~/.iterm2_shell_integration.bash && . ~/.iterm2_shell_integration.bash
TERM_PROGRAM устанавливается как OS X Terminal, так и iTerm2.
Если вы знаете, с какими расширениями файлов вы имеете дело, вы можете жестко запрограммировать их:
for f in *.JPG
do
mv "$f" "${f%.JPG}.jpg"
done
Для более общего случая:
for f in *
do
e="${f##*.}"
b="${f%.*}"
mv "$f" "${b}.${e,,}"
done
Где тяжелая работа выполняется с расширением переменной bash to:
,,
) в процессе 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
. Просто чтобы добавить еще один ответ, которого еще нет в списке:
for f in *.JPG; do mv "$f" "${f//JPG/jpg}"; done