如何复制多个文件但保持其扩展名相同?

如何复制多个文件但保持其扩展名相同?

我正在循环访问多个文件,并$file代表当前文件。

如何复制或重命名当前文件并使扩展名保持不变?

例如如果$file=x.jpg

如何$file使用文件名制作 的副本x_orig.jpg

到目前为止我有:

for file in /tmp/p/DSC*.JPG; do
  cp $file $file+'_orig'.JPG
done

但这会复制文件

DSCF1748.JPG

DSCF1748.JPG+_orig.JPG

而我想要一个名为

DSCF1748_orig.JPG

同样,使用cp $file "$file"_orig.JPG

结果文件如DSCF1748.JPG_orig.JPG

我想得到_orig文件名中间的...

答案1

你可以使用 bash 的字符串替换功能为了那个原因:

for file in /tmp/p/DSC*.JPG; do
  cp "$file" "${file%.JPG}"_orig.JPG
done

一般格式是将从 的末尾${string%substring}删除。例如:substringstring

$ f=foobar.JPG; echo "${f%.JPG}"
foobar

答案2

zcp -o -p '/tmp/p/DSC*.JPG' '$f:r_orig.JPG'

或同等地

zcp -o -p '/tmp/p/(DSC*).JPG' '/tmp/p/${1}_orig.JPG'

这需要您运行 zsh (其他 shell 没有这样的东西)并将其放入您的~/.zshrc

autoload -U zmv
alias zcp='zmv -C'
alias zln='zmv -L'

-o -p告诉zcp将选项传递-pcp命令,以保留文件元数据(尤其是修改时间)。

相关内容