Нет, боюсь, это невозможно, потому что идиома ##
относится только к расширению переменной , поэтому вам всегда нужно ссылаться на существующую переменную.
Тем не менее, для вашего случая вам может подойти следующий лайфхак:
sh -c 'echo "${*##refs/heads}"' - "`git symbolic-ref HEAD`"
или:(как лучший башизм)
sh -c 'echo "${*##refs/heads}"' -- "$(git symbolic-ref HEAD)"
Это запускает не -интерактивный sh
вывод вашей команды git
в качестве аргумента, для которого затем используется идиома ##
.
Если вы можете быть уверены, что вывод вашей команды достаточно очищен (, т.е. не содержит *
или других символов подстановки ), вы можете сохранить себя, набрав двойные -кавычки.
Использование find
и утилиты Perl rename
:
find. -type d -name "* [0-9][0-9]:[0-9][0-9]:[0-9][0-9]" \
-exec rename -n 's/ \d{2}:\d{2}:\d{2}$//' {} \;
Удалите параметр -n
, если результат выглядит так, как ожидалось.
find. -type d -name '*[0-2][0-9]:[0-5][0-9]:[0-5][0-9]' -exec sh -c '
for d; do mv -- "$d" "${d% *}"; done
' findsh {} +
Перед фактическим запуском скрипта вы можете поместить echo
между do
и mv
, чтобы убедиться, что будет применена правильная операция mv
.
-type d
:Выбрать только каталоги -name '*[0-2][0-9]:[0-5][0-9]:[0-5][0-9]'
:Шаблон глобуса для сопоставления только имен с этим временем в конце. for d; do mv -- "$d" "${d% *}"; done
:К каждому найденному каталогу применить операцию mv
, переименовав его. ${d% *}
удаляет из имени файла все после (, включая )последний пробел.