Linha de comando: crie o arquivo com o novo nome de arquivo se o nome do arquivo já existir

8

Eu queria saber se era possível ter um comando que cria um arquivo, mas toda vez que o comando é executado, ele não sobrescreveria o arquivo criado na execução anterior.

Por exemplo: touch test1.txt criaria um arquivo chamado test1.txt . Mas da próxima vez que eu executar, eu gostaria que o novo arquivo fosse chamado test2.txt , ou algo assim. Então, sem sobrescrever o arquivo já existente. De certa forma, poderia ser executado várias vezes sem problemas.

Não me entenda mal, não estou tentando criar vários arquivos com um comando.

Obrigado antecipadamente!

    
por Nick Lemaire 02.08.2011 / 16:45

3 respostas

9

A solução mais fácil seria adicionar um registro de data e hora ao nome do arquivo e não usar um único dígito.

O método mais fácil de criar um arquivo vazio seria touch test$(date +%Y%m%d-%H%M%S) e isso resultaria em um arquivo chamado test20110802-170410 . Uma segunda vez, test* receberá um novo registro de data e hora, o que resultará em 2 arquivos.

    
por Rinzwind 02.08.2011 / 17:05
5

Eu duvido que exista um comando geral para fazer isso, mas você pode pensar em algo assim:

create() {
  read prefix number suffix < <(sed -r 's/(.*)([0-9]+)\.(.*)$/  /' <<<"")
  while true; do
    file="$prefix$number.$suffix"
    if [[ -e "$file" ]]; then
      ((number++))
    else
      touch "$file"
      break
    fi
  done
}

O parâmetro de entrada para a função é dividido em prefixo, número, sufixo e, em seguida, até que o arquivo exista, o número é incrementado. Encontrado um espaço livre, o arquivo é criado com touch .

O mecanismo de divisão deve ser adaptado às suas necessidades e várias verificações de erro devem ser adicionadas.

    
por enzotib 02.08.2011 / 17:08
1

Se os números de sequência não forem necessários, a maneira mais fácil é usar o comando mktemp .

    
por Michał Šrajer 07.08.2011 / 18:29