使用 Bash 命令从文件名列表中删除部分,同时维护删除部分后的唯一标识符
Delete sections from a list of filenames while maintaining a unique identifier coming after deleted section using Bash Command
提前感谢这个杰出的社区。请帮助我的第一个 post!
我一直在尝试编写一个命令来删除文件名的各个部分,但无法弄清楚如何在维护我要删除的区域之后的唯一标识符的同时执行此操作。
这里是原始文件名的例子(我有一个充满这样的文件夹):
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
通过删除最后一个 space 分隔字符串进行两次拆分,然后删除 .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'
提前感谢这个杰出的社区。请帮助我的第一个 post! 我一直在尝试编写一个命令来删除文件名的各个部分,但无法弄清楚如何在维护我要删除的区域之后的唯一标识符的同时执行此操作。
这里是原始文件名的例子(我有一个充满这样的文件夹):
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
通过删除最后一个 space 分隔字符串进行两次拆分,然后删除 .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'