Como alterar a configuração da desintoxicação (traço em vez de sublinhado)?

3

Eu encontrei, melhor até agora, uma solução ao mudar todos os nomes de arquivos irritantes em grandes quantidades, tornando-os legíveis e mais fáceis de manipular na linha de comando.

Então eu encontrei, entre muitos comandos, um pequeno software chamado desintoxicação . Por padrão, ele substitui espaços por _ . A leitura das páginas de manual não me deu uma resposta sobre como fazer a descriptografia renomear os arquivos substituindo os espaços por - .

[/] cd test
one five/  one four/  one one/  one three/  one two/
[test] detox *
[test] l
one_five/  one_four/  one_one/  one_three/  one_two/
[test] 

Como fazer isso?

Não consigo encontrar o arquivo .detoxrc (ou qualquer arquivo relacionado a este programa) e, se o criei, não sei o que colocar nele.

P.S. Existe uma alternativa à desintoxicação?

    
por Igor V. 18.04.2015 / 17:47

2 respostas

1

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.

    
por 19.04.2015 / 01:37
1

Pelo menos na versão de desintoxicação 1.2.0, a filtragem pode ser personalizada (os seguintes comandos / locais podem precisar ser alterados dependendo da sua distribuição). Em primeiro lugar:

cp /usr/share/detox/safe.tbl ~/mysafe.tbl

Em seguida, edite o arquivo mysafe.tbl pesquisando a palavra "space" (ao redor da linha 127) e altere o sublinhado para um hífen.

Agora modifique ~/.detoxrc , por exemplo da seguinte forma:

sequence hyphenated {
   safe {filename "/home/MY_USSERNAME/mysafe.tbl";};
   #wipeup {remove_trailing;};
};

(Substitua "MY_USERNAME", claro ...)

Agora, execute o seguinte comando:

detox -vs hyphenated *

e você deve estar pronto para ir:)

Editar 20170801: O Detox parece ter alguns problemas de UTF-8. Criei alguns patches, enviei um email para upstream e debian maints, agora tenho que abrir um bug em algum site chamado "github" ou algo assim - hora de descobrir ...

    
por 27.04.2017 / 06:20