我的文件名称为“NAME-xxxxxx.tedx”,我想删除“-xxxxxx”部分。 x都是数字。
正则表达式"\-[0-9]{1,6}"
匹配子字符串,但我不知道如何从文件名中删除它。
知道如何在shell中做到这一点吗?
答案 0 :(得分:4)
如果您安装了perl version of the rename
command,可以尝试:
rename 's/-[0-9]+//' *.tedx
演示:
[me@home]$ ls
hello-123.tedx world-23456.tedx
[me@home]$ rename 's/-[0-9]+//' *.tedx
[me@home]$ ls
hello.tedx world.tedx
如果这意味着覆盖现有文件,则此命令非常智能,不会重命名文件:
[me@home]$ ls
hello-123.tedx world-123.tedx world-23456.tedx
[me@home]$ rename 's/-[0-9]+//' *.tedx
world-23456.tedx not renamed: world.tedx already exists
[me@home]$ ls
hello.tedx world-23456.tedx world.tedx
答案 1 :(得分:1)
echo NAME-12345.tedx | sed "s/-[0-9]*//g"
将提供NAME.tedx
。因此,您可以使用循环并使用mv
命令移动文件:
for file in *.tedx; do
newfile=$(echo "$file" | sed "s/-[0-9]*//g")
mv "$file" $newfile
done
答案 2 :(得分:0)
如果你只想使用shell
shopt -s extglob
for f in *-+([0-9]]).tedx; do
newname=${f%-*}.tedx # strip off the dash and all following chars
[[ -f $newname ]] || mv "$f" "$newname"
done