3

このようなファイル(画像)がたくさんあります(ファイル名は数字のみで構成されています):

123456.jpg
369258.jpg
987123.jpg
...

他のフォルダーにそれぞれのコピーを作成し(outputという名前にしましょう)、名前の数字に基づいて各ファイルの名前を変更する必要があります(疑似コードで):

outputFileName = String(filename[0]) + String(filename[1]) + String(filename[2]+filename[3]) + ".jpg"

ご覧のとおり、名前の変更には、ファイル名に特定の記号を取得することと、ファイル名にいくつかの記号の合計を取得することが含まれます。

同様のアルゴリズムに基づいて、スクリプトを配置したフォルダー内のすべての *.jpg を一括して名前変更するスクリプトを作成し、名前を変更したものを前述の出力フォルダーに出力する必要があります。

このスクリプトは、cygwin シェルを介して macos ターミナルおよび Windows から実行できるはずです。

4

2 に答える 2

4

主な問題は、bash変数の特定の文字を取得する方法とbashで追加を実行する方法だと思います。

  1. bash 変数から char を取得するには、次の形式を使用できます${var:START_INDEX:LENGTH}

  2. 加算を実行するには:$((ARG1 + ARG2))

結果のスクリプトは次のようになります。

#!/bin/bash

for f in *.jpg
do
  output=${f:0:1}${f:1:1}$((${f:2:1} + ${f:3:1})).jpg
  mv -- "$f" "$output"
done
于 2013-07-15T11:01:12.057 に答える
3

部分文字列抽出を探しています。

構文は です${string:position:length}。ここで、string は変数の名前、position は開始位置 (0 は最初のインデックス)、length は部分文字列の長さです。

質問で指定されたファイル名を作成し、それらを「input」という名前のフォルダーから「output」という名前のフォルダーにコピーするスクリプトは、次のようになります。

#!/bin/bash
for file in input/*.jpg
do
    filename="$(basename "$file")"
    firstChar="${filename:0:1}"
    secondChar="${filename:1:1}"
    thirdAndFourthChar="$(( ${filename:2:1} + ${filename:3:1} ))"
    newfilename="$firstChar$secondChar$thirdAndFourthChar.jpg"
    cp "$file" "output/$newfilename"
done
于 2013-07-15T11:01:01.740 に答える