regex - 从文件名列表中删除部分,同时使用 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
解决方案
通过删除最后一个空格分隔的字符串进行两次拆分,然后删除该.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'
推荐阅读
- javascript - 过滤具有反向关系的对象时超出最大调用堆栈大小(领域 10.1.1)
- inno-setup - Inno Setup,[运行]中参数中的空格
- reactjs - 应用程序对此 Web 资源没有足够的权限,无法在 Azure AD B2C 中执行操作
- go - 如何查询gorm中的ManyToMany字段
- amazon-web-services - AWS DynamoDB - 如果我只想按日期查询表,则使用 GSI 或扫描
- sql-server - 从 SSMS(Win 10)连接 Docker 映像中的 SQL Server 会引发错误“现有连接被主机强制关闭”
- python - 在应用程序启动时获取所有 QStackedWidget 项目的大小
- php - 重定向后的nginx php下载文件不起作用
- jquery - 如何使用 .each 方法获取文本文件,
- node.js - 将数据访问和业务逻辑移至 CLI 并在 graphql 服务器中使用