É possível renomear arquivos em lote no Fish para que os espaços sejam substituídos por sublinhados?
Tentei descobrir sozinho, mas ainda não consegui: https://fishshell.com/docs/current/cmds/string.html#replace-literal-examples .
Eu tentei coisas como
for file in *; mv $file $file | string replace -a ' ' '_'; end
mas nenhuma solução funcionou para mim.
Pode haver maneiras mais idiomáticas de renomear fish que eu não conheço, no entanto, sua abordagem de loop funcionará se você colocar
string replace
dentro de uma substituição de comando :Observe a tubulação para
string collect
(requer fish 3.1.0 ou mais recente) para evitar a divisão que seria feita em caracteres de nova linha, para que possa ser feita em nomes de arquivo arbitrários. Os caracteres de nova linha finais (aqueles adicionados por,string replace
mas também aqueles encontrados no final dos nomes dos arquivos, se houver) são perdidos.Versões recentes de
fish
(3.4.0 ou mais recentes) agora adicionaram suporte para a$(...)
forma de substituição de comando no estilo Korn, que pode ser usada entre aspas duplas, evitando a divisão e eliminando a necessidade destring collect
:Preservar as novas linhas finais nos nomes dos arquivos, se houver, pode ser conseguido trabalhando com strings delimitadas por NUL:
Porém, se você estiver substituindo espaços por sublinhados, é provável que você também queira substituir outros caracteres de espaço em branco (incluindo nova linha, também conhecido como
\n
) por sublinhado, que poderia ser apenas:(substitui apenas espaço ASCII,
\r
,\n
,\t
,\v
,\f
) ou:Para corresponder a outros caracteres classificados como espaços em branco pelo Unicode (incluindo coisas como o espaço inseparável , o espaço ideográfico e mais algumas dezenas) com base em cordas de caracteres
U
Nicode .C
P
Substitua
*\ *
por{.,}*\ *
(*
por{,.}*
) para processar também arquivos ocultos.rename
Esta forma não é específica para peixes. Provavelmente a maneira mais fácil de renomear vários arquivos é usando Perl
rename
. Para traduzir espaços em sublinhados, você:Se os arquivos também estiverem em subdiretórios, você poderá usar globstar ou
find
:Referências
y/
, traduzir em vez de substituir .