使用bash分割图像文件
我不知道该怎么做,所以我想得到一些帮助。我有需要复制的图像,并根据当前文件命名对其应用了新的文件名。以下是一些文件的示例: 备选方案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分割图像文件,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) 以原始文件名为每
我想在终点站做点什么,也许是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]
这不太容易出错,并且易于维护。此外,它将在所有系统上工作。
上述函数将给出新文件名的列表。使用此列表将原始文件复制到新文件中