如何重命名多个文件的中间部分

如何重命名多个文件的中间部分

我有一些数字文件,例如:

test01-aaa.txt
test02-bbb.txt
test03-ccc.txt
test04-ddd.txt

我需要从名称中删除 aaa、bbb、ccc、ddd 部分。我能做的最好的办法是什么?我尝试使用'rename'命令,但我该如何使用这种方式?

rename -v "test??-*.txt" "test??.txt" *.txt

有这样的文件:

test01.txt
test02.txt
test03.txt
test04.txt

答案1

shell 中的一个简单循环(这避免了这样的事实rename该实用程序有几个相互冲突的变体):

for name in test??-*.txt; do
    mv "$name" "${name%%-*}.txt"
done

该循环迭代当前目录中与给定模式匹配的所有名称。对于每个这样的名称,-使用标准参数替换从第一个字符串的末尾修剪字符串的末尾。替换将从变量值中${variable%%pattern}删除最长的后缀字符串匹配。然后我们将后缀添加回替换结果中。patternvariable.txt

bashshell 中,您可能需要nullglob在运行循环之前设置 shell 选项,以便在没有匹配的文件名时不会运行单次迭代。

mvGNU 系统(或任何带有mvGNU coreutils 的系统)上,您可以使用-b--backup备份目标文件(如果它恰好已经存在)。如果没有-b,上面的循环将通过简单地覆盖现有文件来处理名称冲突。

相关内容