Определите следующее имя для определенного файла [закрыто]

В моем случае @today

$ chmod a-x /etc/cron.weekly/apt-xapian-index
$ echo 'APT::Periodic::Enable "0";' >> /etc/apt/apt.conf.d/10periodic
2
задан 26 June 2017 в 23:32

6 ответов

Мое решение состоит в том, чтобы заглянуть в этот каталог для файлов, а затем выбрать последний:

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

затем показать имя нового файла:

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

let's test it:

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

Получить имя файла:

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

Получить номер +1:

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

Слить их:

$ echo ${filename%_*}_$(( ${filename##*_} + 1 ))
./file_1000
2
ответ дан 22 May 2018 в 21:08

Мое решение состоит в том, чтобы заглянуть в этот каталог для файлов, а затем выбрать последний:

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

затем показать имя нового файла:

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

let's test it:

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

Получить имя файла:

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

Получить номер +1:

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

Слить их:

$ echo ${filename%_*}_$(( ${filename##*_} + 1 )) ./file_1000
2
ответ дан 18 July 2018 в 11:04

Мое решение состоит в том, чтобы заглянуть в этот каталог для файлов, а затем выбрать последний:

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

затем показать имя нового файла:

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

let's test it:

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

Получить имя файла:

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

Получить номер +1:

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

Слить их:

$ echo ${filename%_*}_$(( ${filename##*_} + 1 )) ./file_1000
2
ответ дан 24 July 2018 в 19:43

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"
)

Тест:

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

Также, если вы хотите, это эквивалент в Python. Я в основном хотел попробовать и посмотреть, насколько это было бы проще. Оказывается, это примерно так же просто, но гораздо проще (например, меньше работы для получения наивысшего индекса).

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

Также менее подробная версия:

import os

f_base = 'file_'
indices = [ int(f.split(f_base)[1]) for f in os.listdir('.') ]
print f_base + str(max(indices) + 1)
0
ответ дан 22 May 2018 в 21:08

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" )

Тест:

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

Также, если вы хотите, это эквивалент в Python. Я в основном хотел попробовать и посмотреть, насколько это было бы проще. Оказывается, это примерно так же просто, но гораздо проще (например, меньше работы для получения наивысшего индекса).

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

Также менее подробная версия:

import os f_base = 'file_' indices = [ int(f.split(f_base)[1]) for f in os.listdir('.') ] print f_base + str(max(indices) + 1)
0
ответ дан 18 July 2018 в 11:04

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" )

Тест:

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

Также, если вы хотите, это эквивалент в Python. Я в основном хотел попробовать и посмотреть, насколько это было бы проще. Оказывается, это примерно так же просто, но гораздо проще (например, меньше работы для получения наивысшего индекса).

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

Также менее подробная версия:

import os f_base = 'file_' indices = [ int(f.split(f_base)[1]) for f in os.listdir('.') ] print f_base + str(max(indices) + 1)
0
ответ дан 24 July 2018 в 19:43

Другие вопросы по тегам:

Похожие вопросы: