Como escolho um nome de arquivo com sufixos numéricos consecutivos?

2

Gosto de preservar as coisas, por isso quero preservar .bash_history .

Eu gostaria de copiá-lo em um diretório usando um script. Como aqui

#!/bin/bash
#Something here? number=~/Desktop/Coding/Bash\ Histories/bash_history "?"
cp ~/.bash_history ~/Desktop/Coding/Bash\ Histories/bash_history #$number "?"

Mas eu já tenho um arquivo chamado bash_history , bash_history 2 , bash_history 3 e assim por diante.

Eu quero verificar o número mais alto, neste caso 5. E se bash_history 5 existir, eu quero que ele nomeie bash_history 6 .

E se for bash_history 11111 , quero que o nomeie bash_history 11112 .

Não tenho certeza de qual comando devo usar aqui, if em combinação com grep ou algo assim?

    
por DisplayName 29.10.2014 / 15:51

1 resposta

1

Você pode fazer isso com ls , sort , tail e cut .

Comece a renomear bash_history para bash_history 1 , para que todos os arquivos tenham um número. Em seguida, execute o seguinte para copiar o próximo arquivo:

#!/bin/bash

D=~/Desktop/Coding/Bash\ Histories

num=$(ls "$D" | cut -d ' ' -f 2 | sort -nr | head -1)
num=$(( num + 1 ))
cp ~/.bash_history "$D/bash_history $num"

O ls $D apenas lista os arquivos no diretório "armazenamento". De cada um dos nomes (por exemplo, bash_history 16 , que não inclui o caminho), o cut -d ' ' -f 2 divide em ' ' e recebe o segundo campo (o número 16 ). Os números encontrados dessa maneira são classificados em ordem inversa ( -r ) como números ( -n ), porque as sequências 10 estariam antes de 2 . A partir dessa lista (lembre-se que é invertida), você pega o primeiro, ou seja, o maior número.
Esse número você aumenta e usa para o próximo arquivo.

Eu preferiria determinar uma ordem de magnitude (por exemplo, 5 dígitos) primeiro e depois usar printf %05d $num para obter os zeros iniciais (que mantêm os arquivos em ordem alfabética na mesma ordem dos números (pelo menos até atingir 100000) )

    
por 29.10.2014 / 18:43