Como é possível, usando zmv
, substituir qualquer número de espaços por um único sublinhado?
O que eu uso atualmente é
zmv -- '* *' '$f:gs/ /_'
mas substitui cada espaço, e assim foo bar.txt
se torna foo___bar.txt
, não foo_bar.txt
(o que eu gostaria que fosse).
O que você quer aqui é o equivalente ao
+
operador regexp que em zsh comextendedglob
on (ezmv
habilitaextendedglob
) é o##
operador glob .O
:s/.../.../
modificador de csh não faz correspondência de padrões, a menos que você defina ahistsubstpattern
opção.zmv
não define essa opção e redefine as opções para um padrão sensato, então você não pode usá-la lá. A próxima versãozsh
(seja 5.10 ou 6.0) terá:S
( na verdade, a meu pedido e para esse propósito ) que faz a correspondência de padrões incondicionalmente, então, com eles, você poderá fazer:Mas com qualquer versão do zsh, você também pode usar o estilo ksh
${param//pattern/replacement}
:Observe que isso
--
não é necessário aqui, pois o primeiro argumento não começa com-
.