Determina o nome seguinte para um arquivo particular [fechado]

2

Eu tenho que criar um script que leve meu <username> _Release $META $PROJECT

aqui META=red , PROJECT=green

Em seguida, preciso determinar o próximo nome do lançamento para esse META e PROJECT para seu usuário

por exemplo: /user/desktop/release/red/green/file_2 o próximo deve ser /user/desktop/release/red/green/file_3

Então, imagine que há muitos arquivos nessa pasta, então eu preciso determinar qual é o mais alto e incrementá-lo. Eu estou pensando que eu deveria procurar todas as pastas em primeiro lugar, estou realmente confuso.

    
por Ria 26.06.2017 / 22:09

2 respostas

2

Minha solução é procurar nesse diretório pelos arquivos e escolher o último:

filename='find . | sort -t_ -k2 -n | tail -1'

mostre o nome do novo arquivo:

echo ${filename%_*}_$(( ${filename##*_} + 1 ))

vamos testá-lo:

$ mkdir test
$ cd test
$ touch file_{1..999}
$ filename='find . | sort | tail -1'
$ echo $filename
./file_999

Obtenha o nome do arquivo:

$ echo ${filename%_*}
./file

Obtenha o número +1:

$ echo $(( ${filename##*_} + 1 ))
1000

Mesclá-los:

$ echo ${filename%_*}_$(( ${filename##*_} + 1 ))
./file_1000
    
por Ravexina 26.06.2017 / 22:40
0

Pure Bash

get_next_release_name()(
    filename_base='file_'

    # Create array with indices based on the filenames.
    for filename in *; do
        index="${filename##$filename_base}"
        filenames["$index"]="$filename"
    done

    # Get last item in array and get its index.
    filename_highest="${filenames[-1]}"
    index_highest="${filename_highest##*_$filename_base}"

    # Get highest index + 1.
    index_new_highest="$(( $index_highest + 1 ))"
    filename_new="${filename_base}${index_new_highest}"

    echo "$filename_new"
)

Teste:

# Create test files.
$ mkdir test &&
>  cd test
$ touch file_{1..999}
$ get_next_release_name
file_1000

Também aqui está o equivalente em Python, se você quiser. Eu principalmente queria tentar e ver o quanto mais fácil seria. Acontece que é mais fácil, mas muito mais simples (por exemplo, menos trabalho para obter o maior índice).

import os

filename_base = 'file_'

indices = []
for filename in os.listdir('.'):
  index = int(filename.split(filename_base)[1])
  indices += [ index ]

index_highest = max(indices)
index_new_highest = index_highest + 1
new_filename = filename_base + str(index_new_highest)

print new_filename

Além disso, uma versão menos detalhada:

import os

f_base = 'file_'
indices = [ int(f.split(f_base)[1]) for f in os.listdir('.') ]
print f_base + str(max(indices) + 1)
    
por wjandrea 27.06.2017 / 04:22