気をつけろ!コマンドで * ワイルドカードを使用しています。たとえば、ディレクトリに複数の XML ファイルがある場合:
dmi_standard_load_B0001_set.xml
dmi_standard_load_B0002_set.xml
dmi_standard_load_B0003_set.xml
あなたのコマンドはこれに展開されます:
mv dmi_standard_load_B0001_set.xml dmi_standard_load_B0002_set.xml dmi_standard_load_B0003_set.xml dmi_standard_load_${batch_name}_set.xml
ほとんどの場合、最後の引数がディレクトリではないことを示して失敗します。最初に、次のようにファイルをループします。
for f in dmi_standard_load_*_set.xml
do
mv ${f} dmi_standard_load_${batch_name}_set.xml
done
ただし、そのコードを実行しないでください。まだ終わっていません。ここでの問題は、各 XML ファイルの名前を 1 つだけのファイルに変更することです。実際にdmi_standard_load_${batch_name}_set.xml
は、最後にループを通過した XML ファイルの内容を含む という名前のファイルが作成されます。
これらのファイルごとに異なるバッチ名をユーザーに付けてもらいたいと思いませんか? read
したがって、次のコマンドを使用して、ループ内の各ファイルについて彼女に尋ねる必要があります。
for f in dmi_standard_load_*_set.xml
do
echo Please enter a batch name for file $f :
read batch_name
mv ${f} dmi_standard_load_${batch_name}_set.xml
done
これは機能しますが、エラー チェックは行われません。ユーザーは Enter キーを押すだけで、空のバッチ名を指定できます。ユーザーが名前を付けることを確認する最終バージョンは次のとおりです。
for f in dmi_standard_load_*_set.xml
do
batch_name=
while [[ ${batch_name} == '' ]]
do
echo Please enter a batch name for file $f :
read batch_name
done
mv ${f} dmi_standard_load_${batch_name}_set.xml
done