Muitos sistemas desktop Linux salvam capturas de tela com nomes como Screenshot from 2020-11-29 18-57-51.png
. Frequentemente, o que eu realmente precisava era renomear os arquivos para algo mais óbvio, como webinar1.png
, webinar2.png
, e assim por diante. Por sorte, renomear um monte de arquivos é muito fácil de fazer na linha de comando do Linux.
O shell Bash é muito versátil e oferece diferentes alternativas para examinar valores e expandir variáveis. Uma boa avaliação é avaliação aritmética. Para realizar esta avaliação, envolva sua declaração aritmética com $((
e ))
.
A avaliação também pode incluir expansão variável, O que $sum
resolver em um valor. Mas por conveniência, qualquer variável Bash listada entre $((
e ))
expandir automaticamente. Como um exemplo, para incrementar a contagem de uma variável por 1, Você pode digitar:
contagem = $(( contar + 1 ))
Isso é o mesmo que digitar:
contagem = $(( $contar + 1 ))
A expansão aritmética suporta os mesmos operadores encontrados em outras linguagens de programação, incluído +
e -
para adicionar e subtrair, *
e /
para multiplicação e divisão, e %
para o resto. Você também pode usar ++
e --
para aumentar e diminuir um valor em uma variável. Veja a página de manual do Bash e role para baixo até AVALIAÇÃO ARITMÉTICA para a lista completa de operadores suportados e sua precedência.
Para renomear todas as minhas capturas de tela, Eu precisava escrever este comando bash de uma linha:
n = 1; para f na captura de tela * .png; fazer mv -v "$f" webinar $ n.png; n = $(( n + 1 )); feito
Mas, o que isto?
A primeira parte do comando, n=1
, inicializar a variável n
uma 1.
Então eu uso um for
loop para operar em todos os arquivos começando com Screenshot
e terminar com .png
extensão. Em geral, essas são todas as imagens que eu capturei durante meu último webinar. Se eu tivesse que ser mais preciso, você pode incluir a data na especificação do arquivo, O que Screenshot from 2020-11-29*.png
. Barras invertidas são escapes literais para preservar os espaços no nome do arquivo.
Cada iteração do loop for armazena um nome de arquivo na variável f. Então o mv
comando mv -v "$f" webinar$n.png
renomeie cada arquivo com meus nomes preferidos, como webinar1.png
, webinar2.png
, e assim por diante. Eu preciso de compromissos em torno do $f
expansão variável para que os espaços em Screenshot from YYYY-MM-DD hh-mm-ss.png
não cause problemas em mim mv
comando. Se você receber um erro como mv: target 'webinar1.png' is not a directory
, você provavelmente não colocou aspas em torno do $f
.
Em resumo, aumentar o valor no n
variável de modo que esteja pronto para a próxima iteração no loop. Expansão aritmética n=$(( n + 1 ))
aumentar o n
variável em 1.