ワイルドカードパターンと2つの追加パラメータを使用してスクリプトを呼び出すにはどうすればよいですか?

ワイルドカードパターンと2つの追加パラメータを使用してスクリプトを呼び出すにはどうすればよいですか?

複数のファイルの名前を変更するコードは次のとおりです。

#!/bin/bash
for file in $1
    do
        mv -i "${file}" "${file/pattern/replacement}"
    done

「pattern」と「replace」を$ 2と$ 3にどのように変更しますか?

このコードは機能しません:

#!/bin/bash
for file in $1
    do
        mv -i "${file}" "${file/$2/$3}"
    done

次の3つのパラメータを使用して名前を変更しようとしました。 (file_*.jpg jpg bak結果は*.jpgすべてのファイルの名前を*.bakファイルに変更する必要があります。)しかし、それがすることは次のとおりです。 (mv -i file_01.jpg file_01.jpgしたがって、両方のmvパラメータが同じで、より多くのファイルがあっても最初のファイルで停止するため、名前は変更されません。*.jpgjpgandの代わりにbashスクリプトにandを手動で入力すると機能します。bak$2$3

ベストアンサー1

以下を使用してスクリプトを呼び出します。

./script file_*.jpg jpg bak

ただし、*スクリプトに渡される前に拡張されます。 filesがあり、file_1.jpgフォルダに次のものがあるとしますfile_2.jpgfile_3.jpg

./script file_1.jpg file_2.jpg file_3.jpg jpg bak

これは${1} = file_1.jpg${2} = file_2.jpgとを意味します${3} = file_3.jpg

${1} = jpg(あなたの例では)次のようにスクリプトを書く方が良いかもしれません${2} = bak。その後、これらの変数をスクリプトに保存して呼び出して削除し、shift 2次のコマンドを使用してすべての位置パラメータを繰り返すことができます。

for file; do
    # do something
done

おすすめ記事