Como prefixar a ordem numérica em nomes de arquivos por Zsh / AWK /…?

3

Eu gostaria de prefixar o formulário de pedido numérico 1-777 nos pedidos que lhe foram dados. Você pode percorrê-lo e incrementar a variável no Bash. No entanto, gostaria de fazer isso com Zsh e / ou Awk. Um exemplo segue. Nomes de arquivo

IMG_20161215_081850.jpg
IMG_20161215_081851.jpg
IMG_20161215_090559.jpg
IMG_20161215_090601.jpg
IMG_20161215_091308.jpg

Desejado

1.IMG_20161215_081850.jpg
2.IMG_20161215_081851.jpg
3.IMG_20161215_090559.jpg
4.IMG_20161215_090601.jpg
5.IMG_20161215_091308.jpg

OS: Debian 8.5

    
por Léo Léopold Hertz 준영 23.12.2016 / 17:44

2 respostas

3
ls *.jpg | nl -s.

nl adicionará números de linha; -s. especifica um . como o separador entre o número e os dados (neste caso, os nomes dos arquivos). Se você quiser remover os espaços iniciais da saída, você pode adicionar isto:

ls *.jpg | nl -s. | sed 's/^ *//'

sed removerá, então, zero ou mais espaços do início da linha.

Se você realmente quiser fazer isso com awk :

ls *.jpg | awk '{ print NR"."$0 }'

NR é uma variável interna que indica o número de registros até o momento analisados.

Para fazer alterações permanentes em nomes de arquivos, faça o seguinte (Michael Vehrs)

ls *.jpg | nl -s. | sed 's/ *\([0-9]\+\)\.\(.*\)/ \./' | xargs -n 2 mv
    
por 23.12.2016 / 18:33
4

Com o zsh, use zmv para realizar renomeação em massa. Primeira execução autoload -U zmv (coloque isso no seu .zshrc ), então

i=1
zmv 'IMG_*.jpg' '$((i++)).$f'
    
por 25.12.2016 / 01:55

Tags