forループを使用してプログラムを実行するコマンドを含む2番目のbashスクリプトに、パイプする圧縮ファイルでいっぱいのフォルダがあります。これまで私は以下を持っています:
targ_path='/scratch/mine/allfiles/targetfiles/'
mybashpath='/scratch/mine/secondbash.sh'
cd $targ_path
ls | grep \.gz | $mybashpath {}
しかし、これが間違っていることを知っています。 forループを使用してファイルを2番目のbashスクリプトにパイプする必要があります。
私は初めてbashに触れたので、ここで助けてくれて本当にありがとう。
ベストアンサー1
意図がディレクトリを次に変更し$targ_path
、そのディレクトリ$mybashpath
で名前が終わる.gz
各ファイルを引数として使用してスクリプトを一度呼び出すとします。
#!/bin/bash
shopt -s nullglob
targ_path=/scratch/mine/allfiles/targetfiles
mybashpath=/scratch/mine/secondbash.sh
cd "$targ_path" || exit
for name in ./*.gz; do
"$mybashpath" "$name"
done
これによりディレクトリがに変更されますが、$targ_path
失敗すると終了します。
./*.gz
次に、ワイルドカードパターンと一致する名前(つまり、.で終わる現在のディレクトリのすべての名前)を繰り返します.gz
。この名前を$mybashpath
スクリプトの引数として使用して、各名前に対して一度スクリプトを呼び出します。
また、nullglob
ワイルドカードパターンが一致しない場合、ループが一度実行されないようにスクリプトの上部にシェルオプションを設定しました。
$mybashpath
スクリプトがパラメータを使用する方法によっては、cd
これは不要な場合があります。
#!/bin/bash
shopt -s nullglob
targ_path=/scratch/mine/allfiles/targetfiles
mybashpath=/scratch/mine/secondbash.sh
for name in "$targ_path"/*.gz; do
"$mybashpath" "$name"
done