Renomeando: Remova os últimos caracteres X dos arquivos no diretório

2

Estou tentando renomear muitos vídeos baixados pelo youtube-dl de várias fontes. Como você deve saber, o yt-dl anexará o código da view ao nome do arquivo.

Por exemplo,

Video Title-dQw4w9WgXcQ.mp4

Estou procurando um programa ou comando da CLI para remover os últimos X caracteres do nome do arquivo. A partir do exemplo, o número seria 12 caracteres (excluindo extensão de arquivo, .mp4)

Eu tentei procurar um comando desse tipo, mas ainda não encontrei nenhum que funcionasse. Também tentei o KReename, mas não consegui encontrar o equivalente a "Excluir caracteres X iniciando em Último caractere", que eu me lembro de um programa do Windows que usei anteriormente.

Existe algum comando "simples" para fazer isso? Alternativamente, um programa ou alguma configuração no KRename. PyRename tentou, mas também não teve sorte.

    
por Edward Alekos 13.11.2017 / 14:01

3 respostas

2

Com o comando prename ( Perl renomeie):

prename 's/(.*).{12}(\.mp4)/$1$2/' *.mp4
    
por 13.11.2017 / 14:08
1

com zsh :

autoload zmv # best in ~/.zshrc
zmv -n '(*)?(#c12).mp4' '$1.mp4'

(remova -n (dry-run) quando feliz).

    
por 13.11.2017 / 14:16
1

Uma maneira de pensar sobre isso é que você deseja remover os últimos 16 caracteres, incluindo a extensão, para poder usar a expansão de parâmetro bash para fazer isso:

${parameter:offset:length}
       Substring  Expansion.  Expands to up to length characters of the value of parameter starting at the character specified by offset.  If parameter is @, an
       indexed array subscripted by @ or *, or an associative array name, the results differ as described below.  If length is omitted, expands to the substring
       of  the value of parameter starting at the character specified by offset and extending to the end of the value.  length and offset are arithmetic expres‐
       sions (see ARITHMETIC EVALUATION below).

       If offset evaluates to a number less than zero, the value is used as an offset in characters from the end of the value of parameter.  If length evaluates
       to  a  number less than zero, it is interpreted as an offset in characters from the end of the value of parameter rather than a number of characters, and
       the expansion is the characters between offset and that result.  Note that a negative offset must be separated from the colon by at least  one  space  to
       avoid being confused with the :- expansion.

Dada a parte de precisar de um espaço após os dois pontos para números negativos, você pode fazer isso:

#!/bin/bash

for f in *mp4; do
   mv -- "$f" "${f:0: -16}.mp4"
done

exit
    
por 14.11.2017 / 00:53