在移动之前就地修剪文件名

问题描述 投票:0回答:1

我试图使用rename来编辑或修剪文件名,而不使用loop。下面的两个命令都会执行,但文件名保持不变。在我的实际数据中,有几个文件名都是file的格式。谢谢 :)。

文件

19-0000-LastName-FirstName_v1_Non-Filtered_2019-03-21_08:12:56.txt

改名

rename "s/_v1_Non-Filtered_d+_\d+//" *.txt
rename 's/_.*?//' *.txt

所需文件名

19-0000-LastName-FirstName.txt
bash rename
1个回答
1
投票

问题是重命名文件,如:

19-0000-LastName-FirstName_v1_Non-Filtered_2019-03-21_08:12:56.txt

至:

19-0000-LastName-FirstName.txt

在英语中,根据评论,可以表述为:

删除包括_v1在内的所有内容(保留扩展名除外)

这可以通过搜索和替换完成,如:

rename 's/_v1.*(\..*)/$1/' *.txt
  • 比赛: 第一次出现_v1 随后尽可能多的东西(.*) 然后是一段时期(\.) 其次是什么(.*
  • 因为第一个.*,明确匹配的时期必须是最后一个
  • 括号( ... )捕获比赛的一部分供以后使用(如$1
  • 用捕获组替换整个匹配

笔记:

  • 你提供的模式包括一个部分_d+_\d+,由于缺少\匹配“下划线”“d”“+”“下划线”“一个或多个数字”。这永远不会与您的文件名匹配。也许你的意思是:_\d+
  • s/_.*?//寻找_,然后是最短的可能序列(*?)(.)。任何事物的最短可能序列是空字符串。因此,该命令相当于:s/_//
© www.soinside.com 2019 - 2024. All rights reserved.