如何使用Bash在扩展名之前创建带有额外后缀的文件副本?

Phi*_*hil 5 bash file-io

这个标题有点令人困惑,所以让我分解一下.基本上我有一个包含各种名称和扩展名的完整文件目录:

MainDirectory/
    image_1.png
    foobar.jpeg
    myFile.txt
Run Code Online (Sandbox Code Playgroud)

对于iPad应用程序,我需要创建这些副本,并在扩展名之前附加到所有这些文件名末尾的后缀@ 2X - 所以我最终得到这个:

MainDirectory/
    image_1.png
    image_1@2X.png
    foobar.jpeg
    foobar@2X.jpeg
    myFile.txt
    myFile@2X.txt
Run Code Online (Sandbox Code Playgroud)

我不是手动一次更改一个文件名,而是想创建一个脚本来为我处理它.我目前有以下内容,但它没有按预期工作:

#!/bin/bash

FILE_DIR=.

#if there is an argument, use that as the files directory. Otherwise, use .
if [ $# -eq 1 ]
then
  $FILE_DIR=$1
fi

for f in $FILE_DIR/*
do
  echo "Processing $f"
  filename=$(basename "$fullfile")
  extension="${filename##*.}"
  filename="${filename%.*}"
  newFileName=$(echo -n $filename; echo -n -@2X; echo -n $extension)
  echo Creating $newFileName
  cp $f newFileName
done

exit 0
Run Code Online (Sandbox Code Playgroud)

我也希望将它保持为纯粹的bash,而不是依赖于特定于os的调用.我究竟做错了什么?为了做我需要的,我可以改变什么或代码将起作用?

Wil*_*ell 6

#!/bin/sh -e 
cd "${1-.}"

for f in *; do  
  cp "$f" "${f%.*}@2x.${f##*.}"
done
Run Code Online (Sandbox Code Playgroud)