複数のファイルの名前を変更するコードは次のとおりです。
#!/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パラメータが同じで、より多くのファイルがあっても最初のファイルで停止するため、名前は変更されません。*.jpg
)jpg
andの代わりにbashスクリプトにandを手動で入力すると機能します。bak
$2
$3
ベストアンサー1
以下を使用してスクリプトを呼び出します。
./script file_*.jpg jpg bak
ただし、*
スクリプトに渡される前に拡張されます。 filesがあり、file_1.jpg
フォルダに次のものがあるとしますfile_2.jpg
。file_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