重命名文件以删除点后的文本

重命名文件以删除点后的文本

我有这些文件:

JE.TR21201610011612514806.47250728
JE.TR21201610011613514807.91514463
JE.TR21201610011614514808.4107721050
JE.TR21201610011626514818.3578493139
JE.TR21201610011627514819.1032212591
JE.TR21201610011628514820.3663420052
JE.TR21201610011629514821.3388683091

我怎样才能将它们重命名为此?

JE.TR21201610011612514806
JE.TR21201610011613514807
JE.TR21201610011614514808
JE.TR21201610011624514817
JE.TR21201610011626514818
JE.TR21201610011627514819
JE.TR21201610011628514820
JE.TR21201610011629514821

答案1

任何

$ rename -n 's/\.\d*$//' JE.*
rename(JE.TR21201610011612514806.47250728, JE.TR21201610011612514806)
rename(JE.TR21201610011613514807.91514463, JE.TR21201610011613514807)
rename(JE.TR21201610011614514808.4107721050, JE.TR21201610011614514808)
rename(JE.TR21201610011626514818.3578493139, JE.TR21201610011626514818)
rename(JE.TR21201610011627514819.1032212591, JE.TR21201610011627514819)
rename(JE.TR21201610011628514820.3663420052, JE.TR21201610011628514820)
rename(JE.TR21201610011629514821.3388683091, JE.TR21201610011629514821)

或者

$ prename -n 's/\.\d*$//' JE.*
JE.TR21201610011612514806.47250728 renamed as JE.TR21201610011612514806
JE.TR21201610011613514807.91514463 renamed as JE.TR21201610011613514807
JE.TR21201610011614514808.4107721050 renamed as JE.TR21201610011614514808
JE.TR21201610011626514818.3578493139 renamed as JE.TR21201610011626514818
JE.TR21201610011627514819.1032212591 renamed as JE.TR21201610011627514819
JE.TR21201610011628514820.3663420052 renamed as JE.TR21201610011628514820
JE.TR21201610011629514821.3388683091 renamed as JE.TR21201610011629514821

或者

$ mmv -n "JE.*.*" JE.#1
JE.TR21201610011612514806.47250728 -> JE.TR21201610011612514806
JE.TR21201610011613514807.91514463 -> JE.TR21201610011613514807
JE.TR21201610011614514808.4107721050 -> JE.TR21201610011614514808
JE.TR21201610011626514818.3578493139 -> JE.TR21201610011626514818
JE.TR21201610011627514819.1032212591 -> JE.TR21201610011627514819
JE.TR21201610011628514820.3663420052 -> JE.TR21201610011628514820
JE.TR21201610011629514821.3388683091 -> JE.TR21201610011629514821

(删除-n以完成操作)

或者

$ for f in JE.*; do echo mv "$f" "${f%.*([0-9])}"; done
mv JE.TR21201610011612514806.47250728 JE.TR21201610011612514806
mv JE.TR21201610011613514807.91514463 JE.TR21201610011613514807
mv JE.TR21201610011614514808.4107721050 JE.TR21201610011614514808
mv JE.TR21201610011626514818.3578493139 JE.TR21201610011626514818
mv JE.TR21201610011627514819.1032212591 JE.TR21201610011627514819
mv JE.TR21201610011628514820.3663420052 JE.TR21201610011628514820
mv JE.TR21201610011629514821.3388683091 JE.TR21201610011629514821

(删除echo以完成操作)。

答案2

以下是使用 Python 实现的快速方法:

$ tree
.
├── JE.TR21201610011612514806.47250728
├── JE.TR21201610011613514807.91514463
├── JE.TR21201610011614514808.4107721050
├── JE.TR21201610011626514818.3578493139
├── JE.TR21201610011627514819.1032212591
├── JE.TR21201610011628514820.3663420052
└── JE.TR21201610011629514821.3388683091

0 directories, 7 files
$ python -c 'import os,sys; map(lambda x: os.rename(x,x[0:x.rfind(".")]) , sys.argv[1:])' JE.*  
$ tree
.
├── JE.TR21201610011612514806
├── JE.TR21201610011613514807
├── JE.TR21201610011614514808
├── JE.TR21201610011626514818
├── JE.TR21201610011627514819
├── JE.TR21201610011628514820
└── JE.TR21201610011629514821

关于其工作原理,有几个关键点:

  • 我们通过JE.*glob 传递所有文件名,然后通过 引用它们sys.argv[1:]
  • map()lambda允许我们对列表切片中的任何内容执行该功能sys.argv[1:]
  • 我们这里的函数lambda利用os.rename(old,new)函数来重命名列表中的每个项目
  • x[0:x.rfind(".")]实际上是切片(或子字符串)。使用函数,我们可以从字符串的右侧(即末尾).rfind()找到第一次出现的索引。因此,列表切片可以读作.x[0:<index of the last dot>]

答案3

重命名文件和文件夹的一种简单方法是使用命令mv(“move”的缩写)。它的主要用途是移动文件和文件夹,但它也可以重命名它们,因为重命名文件的操作被文件系统解释为将其从一个名称移动到另一个名称。

语法是:

mv (option) file1.ext file2.ext

其中file1.ext是文件的“旧”名称,以及file2.ext新名称。

答案4

我经常使用的一个命令是:vidir.vivim用于文件,vidir用于目录。

如果你执行 vidir 并得到找不到命令您需要安装该包更多工具

sudo apt-get install moreutils

回到你的情况:

  1. 进入文件所在的目录:cd path-to-files
  2. 输入命令:vidir然后按 ENTER
  3. 现在您将看到包含所有文件的所有列表,键入此命令:(:1,$ s/\.\d*$//g它搜索一个点后跟数字并删除所有内容到末尾)
  4. 要退出并保存,请输入::x

也可以看看http://vimregex.com/

相关内容