Com o comando prename
( Perl renomeie):
prename 's/(.*).{12}(\.mp4)/$1$2/' *.mp4
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.
com zsh
:
autoload zmv # best in ~/.zshrc
zmv -n '(*)?(#c12).mp4' '$1.mp4'
(remova -n
(dry-run) quando feliz).
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
Tags rename linux shell-script