
Fiquei me perguntando se era possível ter um comando que criasse um arquivo, mas toda vez que o comando fosse executado, ele não sobrescreveria o arquivo criado na execução anterior.
Por exemplo: touch test1.txt
criaria 1 arquivo chamado test1.txt
. Mas da próxima vez que eu executá-lo, gostaria que o novo arquivo fosse chamado test2.txt
ou algo parecido. Portanto, sem substituir 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.
Desde já, obrigado!
Responder1
A solução mais fácil seria adicionar um carimbo de data/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*
obterá um carimbo de data/hora mais recente, resultando em 2 arquivos.
Responder2
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]+)\.(.*)$/\1 \2 \3/' <<<"$1")
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, até que o arquivo exista, o número é incrementado. Encontrado um slot livre, o arquivo é criado com a extensão touch
.
O mecanismo de divisão deve ser adaptado às suas necessidades e várias verificações de erros devem ser adicionadas.
Responder3
Se os números de sequência não forem necessários, a maneira mais fácil é usar mktemp
o comando.