我正在使用 Elementary OS(对于任何 UNIX 系统来说仍然很新),并且我的旧硬盘上有数百个文本文件需要排序。所有文本文件都有一个名称,例如;
lua-eng1-6TH4eI8gtf3.txt
我需要一个命令可以删除所有字符中的最后 11 个字符,但仍保留扩展名。环顾四周,我看到了“重命名”命令,但我不确定这是否对我有用。
我可以复制、粘贴然后更改任何内容(例如目录)的命令将是令人惊奇的,并且可以解释所有内容的作用。
答案1
这个命令应该适合你,因为我在一些与你的模式相同的示例文件上测试了它:
rename 's/(.*)(-.{11})\.txt$/$1\.txt/' *
解释:
看这个简单的命令:
rename 's/pattern/result/' filename(s)
模式可以是正则表达式。因此,我们可以采用文本的不同部分(即文件名)。如果你不明白,请谷歌搜索正则表达式。看起来很复杂,但是如果你学会了,那就很简单了。
结果,我去掉第一个括号的内容$1
并留下第二个括号,最后添加.txt
到它。
重要通知
首先运行带有选项的命令-n -v
来看看该命令会做什么。如果结果是您想要的,请不带选项地运行它。所以首先像这样运行它:
$ rename -n -v 's/(.*)(-.{11})\.txt$/$1\.txt/' *
rename(lua - eng1-6TH4eI8gtf3.txt, lua - eng1.txt)
rename(lua - eng2-6TH4eI8gtf4.txt, lua - eng2.txt)
rename(lua - eng4-6TH4eI8gtf5.txt, lua - eng4.txt)