首页 > 解决方案 > 从文件名列表中删除部分,同时使用 Bash 命令在已删除部分之后保留唯一标识符

问题描述

提前感谢这个特殊的社区。请帮助我的第一篇文章!我一直在尝试编写删除文件名部分的命令,但无法弄清楚如何在保持我要删除的区域之后出现的唯一标识符的同时执行此操作。

这里是原始文件名的示例(我有一个完整的文件夹):

101 OD_1_20x_L Rho GFP__01.vsi - macro image - C=0.tif
101 OD_1_20x_L Rho GFP__01.vsi - macro image - C=1.tif
101 OD_1_20x_L Rho GFP__01.vsi - macro image - C=2.tif
101 OD_1_20x_L Rho GFP__02.vsi - C=0.tif
101 OD_1_20x_L Rho GFP__02.vsi - C=1.tif
101 OD_1_20x_L Rho GFP__02.vsi - C=2.tif

和期望的结果:

101 OD_1_20x_L Rho GFP__01- C=0.tif
101 OD_1_20x_L Rho GFP__01- C=1.tif
101 OD_1_20x_L Rho GFP__01- C=2.tif
101 OD_1_20x_L Rho GFP__02- C=0.tif
101 OD_1_20x_L Rho GFP__02- C=1.tif
101 OD_1_20x_L Rho GFP__02- C=2.tif

我一直在使用以下变体,但还没有找到一种方法来保存每个文件末尾的唯一 C=#.tif。

for f in ./*; do mv "$f" "$f%.vsi*C=*.tif}.tif" ; done 
for f in ./*; do mv "$f" "${f%.vsi*}C=*.tif" ; done

标签: regexbashrenamefilenamesbatch-processing

解决方案


通过删除最后一个空格分隔的字符串进行两次拆分,然后删除该.vsi部分

像这样的东西

for f in *.tif; do
    echo mv -v -- "$f" "${f%.vsi*} - ${f##* }"
done

echo如果您认为输出正确,请删除。

这是没有的输出echo

renamed '101 OD_1_20x_L Rho GFP__01.vsi - macro image - C=0.tif' -> '101 OD_1_20x_L Rho GFP__01 - C=0.tif'
renamed '101 OD_1_20x_L Rho GFP__01.vsi - macro image - C=1.tif' -> '101 OD_1_20x_L Rho GFP__01 - C=1.tif'
renamed '101 OD_1_20x_L Rho GFP__01.vsi - macro image - C=2.tif' -> '101 OD_1_20x_L Rho GFP__01 - C=2.tif'
renamed '101 OD_1_20x_L Rho GFP__02.vsi - C=0.tif' -> '101 OD_1_20x_L Rho GFP__02 - C=0.tif'
renamed '101 OD_1_20x_L Rho GFP__02.vsi - C=1.tif' -> '101 OD_1_20x_L Rho GFP__02 - C=1.tif'
renamed '101 OD_1_20x_L Rho GFP__02.vsi - C=2.tif' -> '101 OD_1_20x_L Rho GFP__02 - C=2.tif'

推荐阅读