Linux复制文件并重命名为filename的子串

时间:2016-12-20 12:21:14

标签: linux bash shell

我的文件有这个结构:

mynewfile-runtime-tested-1102-19.4-alpha.zip
mysdk-sdk-tested-1102-19.4-alpha.zip
sources-tested-1102-19.4-alpha.zip

我正在寻找一种方法,如何动态检测并删除 tested-1102-19.4-alpha 的后缀,并使用新名称复制文件,使其看起来像:

mynewfile-runtime.zip
mysdk-sdk.zip
sources.zip

后缀应该由分隔符动态检测(' - '),我的另一个文件块后缀如 nottested-404-11.2.34-beta 和另一个一个是 final-01-1-release 。唯一保持不变的是' - '

的分隔符

2 个答案:

答案 0 :(得分:3)

for file in *.zip; do
  mv "$file" "${file%-*-*-*-*.zip}.zip"
done

这是完全可移植的POSIX shell,没有ford或sed或其他程序。 ${file%pattern}位表示删除最短匹配字符串。

您还可以分别使用%%###删除最长匹配。

答案 1 :(得分:1)

要仅移动与模式匹配的文件,您可以执行此操作:

#!/bin/sh                                                                       
suffix='-*-*-*-*.zip'                                                           
for file in *$suffix                                                            
do                                                                            
  trimmed=${file%$suffix}                                                       
  echo mv "$file" "$trimmed".zip                                                
done

如果对结果有信心,请删除echo