Não parece que a desintoxicação tenha uma opção para isso. Deve ser bastante simples modificar o código-fonte para adicionar um filtro com a saída desejada (uma pequena modificação do filtro safe
; não se esqueça de garantir que qualquer -
inicial seja removido).
Você pode pós-processar o resultado de detox
ou usar outras ferramentas completamente. Existem muitas ferramentas de renomeação de arquivos que são mais flexíveis.
O comando Perl renomear (não deve ser confundido com o util-linux rename
command) suporta a conversão de nomes de arquivos com código Perl arbitrário. Este comando está disponível como rename
no Debian e derivados (Ubuntu, Mint,…). Está disponível no Arch como perl-rename . Se você quiser apenas alterar _
para -
e remover o -
, poderá usar:
rename 's/_/-/g; s/\A-*//' *
Isso afeta apenas arquivos (exceto arquivos de ponto) no diretório atual. Para agir em um diretório recursivamente, combine isso com o comando find
.
find . -depth -exec rename 's/_/-/g; s/\A-*//' {} +
Outras características da desintoxicação podem ser expressas em Perl, a maioria delas com o operador s/PATTERN/REPLACEMENT/
. Por exemplo, para reter apenas letras e dígitos e substituir qualquer sequência de outros caracteres por -
, você pode usar
rename 's/[^[:alnum:]]+/-/g; s/\A-//' …
Se você quiser caracteres Unicode aproximados com ASCII , você pode usar Text :: Unidecode :
perl -C -MText::Unidecode /usr/bin/rename '$_ = unidecode($_)' …
Outra poderosa ferramenta de renomeação é o comando zmv da zsh shell. Primeiro, execute isso (coloque-o no seu ~/.zshrc
para uso interativo):
autoload -U zmv
Para alterar _
para -
e remover a faixa -
, você pode usar:
zmv '**/*' '$f:h/${${f##*/-#}//_/-}'
O padrão **/*
faz este comando agir em subdiretórios do diretório atual de forma recursiva.