Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用bash分割图像文件_Bash_Macos_Terminal - Fatal编程技术网

使用bash分割图像文件

使用bash分割图像文件,bash,macos,terminal,Bash,Macos,Terminal,我不知道该怎么做,所以我想得到一些帮助。我有需要复制的图像,并根据当前文件命名对其应用了新的文件名。以下是一些文件的示例: 备选方案8_1045205_1037121_1037063_1037122.tif 备选方案5_1207024_1207037_1207023_1226394_1207036.tif 标准_生活方式_1037098_1037044_1037099.tif 标准_生活方式_1045200_1037117_1037056_1037118.tif 我需要: 1) 以原始文件名为每

我不知道该怎么做,所以我想得到一些帮助。我有需要复制的图像,并根据当前文件命名对其应用了新的文件名。以下是一些文件的示例:

备选方案8_1045205_1037121_1037063_1037122.tif 备选方案5_1207024_1207037_1207023_1226394_1207036.tif 标准_生活方式_1037098_1037044_1037099.tif 标准_生活方式_1045200_1037117_1037056_1037118.tif

我需要:

1) 以原始文件名为每个编号制作一份文件副本,例如,对于第一个,我需要alternate8_1045205.tif、alternate8_1037121.tif、alternate8_1037063.tif、alternate8_1037122.tif

2) 对于包含多个单词和数字的文件,我需要每个单词+数字的文件,例如标准_1045205.tif、生活方式_1045205.tif等


我想在终点站做点什么,也许是bash。我曾尝试使用正则表达式来解决这个问题,但这很棘手,因为数字和单词的数量各不相同。有些文件只有3个数字,一个文件有22个!感谢您的帮助。

将每个文件名转换为列表,然后循环浏览列表:

namelist=()
numlist=()
for f in $(ls); do
    alllist=$(echo ${f%.tif} | tr '_' '\n')
    for e in ${alllist[*]}; do
        if [[ $e == *[a-zA-Z]* ]]; then
             namelist+=($e)
        else
             numlist+=($e)
        fi
    done

    for name in ${namelist[*]}; do
        for num in ${numlist[*]}; do
            echo ${name}_${num}
        done
    done
done

我建议使用python进行实际的文本处理

def splitToFilenames(filename):
    first = []
    second = []
    extension = filename.split(".")[-1]
    for word in filename.split(".")[0].split("_"):
        if word.isdigit():
            second.append(word)
        else:
            first.append(word)
    return ["{}_{}.{}".format(name,num,extension) for name in first for num in second]
这不太容易出错,并且易于维护。此外,它将在所有系统上工作。 上述函数将给出新文件名的列表。使用此列表将原始文件复制到新文件中