ループはディレクトリ内の300ファイルにコマンドを適用し、元の入力ファイル名と新しいテキストを含む出力名を変更します。

ループはディレクトリ内の300ファイルにコマンドを適用し、元の入力ファイル名と新しいテキストを含む出力名を変更します。

svr_varsというコードがあります。 300の異なるファイルを含むディレクトリがあります。私はそれを繰り返し、ディレクトリ内の各ファイルに対してコードを実行したいと思います。 svr_vars コードは共通ファイル名 svr_vars.txt を出力します。したがって、コードを実行するたびにsvr_vars.txtファイル名が上書きされます。したがって、コードを実行するたびに名前を変更する必要があります。

1995051200_72259.txt <=ディレクトリ内のファイルはどのようなものですか?

出力名をsvr_vars.txtからsvr.1995051200_72259.txtに変更したいです。

ベストアンサー1

質問を正しく理解したら、基本的に

svr_vars 1995051200_72259.txt

プログラムがという出力を生成したら、svr_vars.txt名前を次に変更したいと思います。svr.1995051200_72259.txt

300個のファイルがすべて数字で始まり、数字で終わると仮定すると、次の.txtようなループを実行できます。

#!/bin/bash
for file in [1-9]*.txt
do
  svr_vars "$file"
  mv svr_vars.txt "svr.$file"
done

正常に動作しない場合は、このループにいくつかの完全性チェックを追加することができます。例えば

#!/bin/bash
for file in [1-9]*.txt
do
  if [ -e "svr.$file" ]
  then
    echo "$file already processed.  skipping"
  else
    svr_vars "$file"
    if [ ! -e svr_vars.txt ]
    then
      echo "Failed to create results for $file"
    else
      mv svr_vars.txt "svr.$file"
    fi
  fi
done

おすすめ記事