Переименовать каталоги с урезанным именем

Нет, боюсь, это невозможно, потому что идиома ##относится только к расширению переменной , поэтому вам всегда нужно ссылаться на существующую переменную.

Тем не менее, для вашего случая вам может подойти следующий лайфхак:

sh -c 'echo "${*##refs/heads}"' - "`git symbolic-ref HEAD`"

или:(как лучший башизм)

sh -c 'echo "${*##refs/heads}"' -- "$(git symbolic-ref HEAD)"

Это запускает не -интерактивный shвывод вашей команды gitв качестве аргумента, для которого затем используется идиома ##.

Если вы можете быть уверены, что вывод вашей команды достаточно очищен (, т.е. не содержит *или других символов подстановки ), вы можете сохранить себя, набрав двойные -кавычки.

0
16.05.2020, 02:59
2 ответа

Использование 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, если результат выглядит так, как ожидалось.

1
28.04.2021, 23:14
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% *}удаляет из имени файла все после (, включая )последний пробел.
2
28.04.2021, 23:14

Теги

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