复制并替换文件名字符串中的内容

时间:2015-06-12 17:18:37

标签: bash shell

我正在尝试将文件boot-1.5-SNAPSHOT.jar复制到boot-1.5.jar

我已经使用sed尝试了此操作,但我收到了错误消息。我知道语法不对,我希望有人能为我完成它。

cp boot-* | sed -e 's:-SNAPSHOT::g'
cp: missing destination file operand after ‘boot-1.5-SNAPSHOT.jar’

这个想法是脚本不会知道版本号,只是jar会在它试图从中复制文件的文件夹中。这就是我使用星号的原因。版本号经常更改,因此使用cp file file2将无效。

2 个答案:

答案 0 :(得分:4)

不需要-e,请使用Parameter Expansions

sed

$ file=boot-1.5-SNAPSHOT.jar
$ echo ${file/-SNAPSHOT/}
boot-1.5.jar

在这种情况下:

  

$ {parameter / pattern / string}

     

模式替换。模式扩展为生成   模式就像路径名扩展一样。参数被扩展和   模式与其值的最长匹配将替换为字符串。

请注意,由于您正在处理文件,因此您应该引用变量(否则带有空格字符的文件会搞乱)。

此外,您可以创建符号链接而不是副本:

$ cp "$file" "${file/-SNAPSHOT/}"

答案 1 :(得分:2)

您无法将cp命令传递给sed。您必须首先在文件名上使用sed,然后进行复制。

f=$(echo boot-*SNAPSHOT.jar)   
cp "$f" $(sed 's:-SNAPSHOT::' <<< "$f")