0

* dmi_standard_load_B0001_set.xml *という名前のXMLファイルがあり、ユーザーから* batch_name *を受け入れて動的に名前を変更し、* dmi_standard_load _ $ {batch_name}_set.xml*に変更したいと思います。

どうやってやるの ?次のコマンドを試しましたが、エラーが発生して機能しません...

 mv dmi_standard_load_*_set.xml dmi_standard_load_${batch_name}_set.xml
4

3 に答える 3

1

たとえば、次の 1 行のスクリプトを使用できます。

for file_name in *; do echo -ne "Renaming file \"${file_name}\" Enter batch_name: "; read batch_name; mv "${file_name}" "dmi_standard_load_${batch_name}_set.xml"; done

これは私のgentooボックスの例です:

user@host ~/test $ ls -1
dmi_standard_load_B0001_set.xml
dmi_standard_load_B0002_set.xml
dmi_standard_load_B0003_set.xml
dmi_standard_load_B0004_set.xml
dmi_standard_load_B0005_set.xml
user@host ~/test $ for file_name in *; do echo -ne "Renaming file \"${file_name}\" Enter batch_name: "; read batch_name; mv "${file_name}" "dmi_standard_load_${batch_name}_set.xml"; done
Renaming file "dmi_standard_load_B0001_set.xml" Enter batch_name: test
Renaming file "dmi_standard_load_B0002_set.xml" Enter batch_name: another test
Renaming file "dmi_standard_load_B0003_set.xml" Enter batch_name: and test again
Renaming file "dmi_standard_load_B0004_set.xml" Enter batch_name: four
Renaming file "dmi_standard_load_B0005_set.xml" Enter batch_name: last, five
user@host ~/test $ ls -1
dmi_standard_load_and test again_set.xml
dmi_standard_load_another test_set.xml
dmi_standard_load_four_set.xml
dmi_standard_load_last, five_set.xml
dmi_standard_load_test_set.xml
user@host ~/test $
于 2013-03-14T09:30:36.200 に答える
1

気をつけろ!コマンドで * ワイルドカードを使用しています。たとえば、ディレクトリに複数の 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
于 2013-03-14T09:11:10.443 に答える
1

それで、あなたの典型的なバッチ名は何ですか?その場合、ファイル名の 2 番目のビットの周りにスピーチ マークを付ける必要があるかもしれません。echo $ batch_name または load_$(echo $ $batch_name)_set.xml を試す価値があります

于 2013-03-14T08:25:42.303 に答える