确定特定文件的下一个名称

确定特定文件的下一个名称

我必须创建一个脚本来<username> _Release $META $PROJECT

这里META=redPROJECT=green

接下来我需要确定下一个版本的名称META以及PROJECT您的用户

例如:/user/desktop/release/red/green/file_2 下一步应该是 /user/desktop/release/red/green/file_3

假设该文件夹中有很多文件,所以我需要确定哪个文件是最高的,然后增加它。我在想我是否应该先搜索所有文件夹,我真的很困惑。

答案1

我的解决方案是查看该目录中的文件,然后选择最后一个:

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

然后显示新文件的名称:

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

让我们测试一下:

$ 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

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

相关内容