ファイル名を変数として名前パターンとして指定するコマンドがあります。file_*_123.txt
Script.sh file_*_123.txt
これで、一致するパターンを持つ複数のファイルがある場合は、最初のファイルに対してのみ実行されるので、名前パターンと一致するすべてのファイルに対してこのスクリプトを実行したいと思います。例えば
file_1_123.txt, file_2_123.txt, file_3_123.txt
一種のforループです。しかし、ファイル数が1つ以上である可能性があるので、繰り返し方法がわかりません。
誰でも解決策を提案できますか?
ベストアンサー1
これには、ループ内でスクリプトを呼び出すか、スクリプトがコマンドライン引数を繰り返すように配置することが含まれます。
最初のオプション:
for filename in file_*_123.txt; do
./Script.sh "$filename"
done
これにより、パターンに一致する各ファイルに対して一度スクリプトが呼び出されますfile_*_123.txt
。
2番目のオプション:
スクリプトを変更して本文をループにラップできます。
#!/bin/sh
for filename do
# here you do whatever you need to do with "$filename"
done
または、
#!/bin/sh
for filename in "$@"; do
# here you do whatever you need to do with "$filename"
done
(ループの2つの変形は同じです)
これにより、スクリプトはコマンドライン引数を繰り返します。次に、質問に示すようにスクリプトを実行します。
./Script.sh file_*_123.txt