0

そのため、スクリプトはファイル拡張子と、場合によっては複数のファイルを取り込んで拡張子を変更する必要があります。ほとんどの場合は機能しますが、ファイルにスペースが含まれていると、スペースが変更され、ファイルが存在しないと表示されます。これが私が持っているものです...

#!/bin/sh
fileExtension="$1"
shift
oldName="$@"
extension=${oldName##*.}
totalFiles=$#
totalFiles=$(( totalFiles+1 ))

num=1
while [ $num -lt $totalFiles ]
do
   for i in "$oldName"
   do
      extension=${i##*.}
      if test -e "$i" then
          newName="${i%.*}.$fileExtension"
          if [ "$i" = "$newName" ]
          then
             :
          else
              mv "$i" "$newName"
          fi
      else
          echo "$i": No such file
      fi
      num=$(( num+1 ))
      shift
      done
done
4

3 に答える 3

0

単純化しない理由:

#!/bin/sh
fileExtension="$1"
shift
for file in "$@"
do
    extension=${file##*.}
    if [ -e "$file" ]
    then
        newName="${file%.*}.$fileExtension"
        if [ "$file" != "$newName" ]
        then mv "$file" "$newName"
        fi
    else
        echo "$file: No such file" >&2
    fi
done
于 2013-05-21T03:06:17.190 に答える
0

少なくともあなたのように、文字列を反復することはできません。oldName配列である必要があります

# other stuff
oldName=("$@")
# other stuff
for i in "${oldName[@]}"
# other stuff
于 2013-05-21T01:20:54.297 に答える