С помощью zsh
вы можете использовать сочетание квалификаторов глобусов, модификаторов расширения истории и универсальных флагов .
Предполагая, что вы включили расширенный режим подстановки и подстановки шаблонов истории через
setopt extendedglob
setopt histsubstpattern
затем вы можете запустить
print doc-*.txt(#q:s/(#b)doc-(*).txt/'${match[1]}'/)
, который будет выводить
jane mike susan
Как обычно, вы можете комбинировать это с другими квалификаторами/модификаторами/флагами, например. выбирать только обычные файлы, привязывать выражение к началу/концу слова и т. д.
Хотя, если вы хотите перебрать каждое имя файла, с помощью zsh
вы можете вложить расширения параметров, чтобы ваш код можно было упростить до
for fname in doc-*.txt; do
print input: ${fname} output: output-${${fname#doc-}%.txt}.results
done
Приведенный выше (относительно:вашего комментария)использует одно выражение и не требует промежуточной переменной.
Извините, что зашел так поздно, но я только что столкнулся с той же проблемой. Различные ответы в Интернете предполагают, что это связано с нехваткой места на жестком диске. В моем случае я обнаружил, что изменил настройку Virtualbox «Папка машины по умолчанию», чтобы использовать внешний жесткий диск, который не был подключен в то время, когда я пытался создать новую машину. Стоит проверить эти две возможности!