如何複製多個檔案但保持其副檔名相同?

如何複製多個檔案但保持其副檔名相同?

我正在循環存取多個文件,並$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命令,以保留檔案元資料(尤其是修改時間)。

相關內容