我有一些数字文件,例如:
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}
删除最长的后缀字符串匹配。然后我们将后缀添加回替换结果中。pattern
variable
.txt
在bash
shell 中,您可能需要nullglob
在运行循环之前设置 shell 选项,以便在没有匹配的文件名时不会运行单次迭代。
在mv
GNU 系统(或任何带有mv
GNU coreutils 的系统)上,您可以使用-b
或--backup
备份目标文件(如果它恰好已经存在)。如果没有-b
,上面的循环将通过简单地覆盖现有文件来处理名称冲突。