Как скопировать несколько файлов, сохранив их расширения прежними?

Как скопировать несколько файлов, сохранив их расширения прежними?

Я просматриваю несколько файлов и $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}то, что удалит substringс конца string. Например:

$ 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 (в других оболочках ничего подобного нет) и поместить в свой файл следующее ~/.zshrc:

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

-o -pуказывает zcpна необходимость передать параметр -pкоманде cpдля сохранения метаданных файла (особенно времени модификации).

Связанный контент