.xyz拡張子を持つ特定のファイルを使用して.shを実行する方法

.xyz拡張子を持つ特定のファイルを使用して.shを実行する方法

abc.shファイルと入力ソース()がありますinput.xyz

私はいつもabc.sh入力ソース(例:I input sh abc.sh input.xyz)を使ってファイルを実行しますが、ディレクトリ数が増えるにつれて入力ファイル名を入力するのはあまりにも怠けます。

コマンド()を入力するのではなく、abc.shファイルにプロセスを挿入して実行する方法はsh abc.sh input.xyz

現在のスクリプトはこれです

INPUT=$1                            

n="1"                               
numb=$(sed -n "$n"p $1)             
#echo $numb
dummy="NULL"

コメントありがとうございます。私の間違いでした。スクリプトの実行時に入力します。

sh abc.sh 000.xyz      

実行するたびに000.xyz数字が違うので、.xyzただ固定されますね。

ベストアンサー1

bashを使用すると、ディレクトリ(001.xyz、002.xyzなど)で可能なすべての入力ファイルを繰り返すことができます。実行中の項目を構成するために、別のBASHスクリプトに配置する方が簡単です(例:batch_run.sh)。

たとえば、ループを使用してfor現在のディレクトリの各xyzファイルを繰り返し、abc.shそのファイルに対してスクリプトを実行できます。

for input_file in *.xyz
do
    sh abc.sh $input_file
done

複数のディレクトリがある可能性があると述べました。また、ワイルドカード文字(*)を拡張してディレクトリ(現在の場所に基づいて)を検討することもできます。

for input_file in */*.xyz
do
    sh abc.sh $input_file
done

スクリプトを入力ファイルと同じディレクトリで実行する必要がある場合は、cdループ内でさまざまな操作を実行することもできます。

# remember the original directory before the for loop
original_directory = $(pwd)

# loop through all valid directories containing xyz files
for input_file in */*.xyz
do
    # enter the directory of containing the xyz file
    cd $(dirname $input_file)

    # run the script on the xyz file
    sh abc.sh $(basename $input_file)

    # return to the original directory
    cd ${original_directory}
done

やりたいことや仕様によっては少し複雑になるかもしれませんが、forBASHループを使ってコマンドを自動的に繰り返す方法についてのアイデアを得ることを願っています。

おすすめ記事