複数のサブディレクトリで同じコマンドセットを番号順に実行するには?

複数のサブディレクトリで同じコマンドセットを番号順に実行するには?

私のparent_directoryにはE-11_GとE-10_Gというサブディレクトリがあります。各サブディレクトリには、E-2_U、E-1_U、およびE0_Uという名前のサブディレクトリがあります。各フォルダで、ander、ander.band、ander.data、ander.in、およびander.logファイルに対してコマンドを実行します。

より良い写真は次のとおりです。

                               parent_directory
                               E-11_G/ E-10_G/ 
                          E-2_U/ E-1_U/ E0_U/ 
            ander  ander.band  ander.data  ander.in  ander.log

より効率的なバージョンを作成したいと思います。

#!/bin/bash

cd parent_directory/E-11_G/E-2_U/; 
ls -l ander ander.band ander.data;
cat ander.in;
cat ander.log;
pwd;
cd ../E-1_U;
ls -l ander ander.band ander.data;
cat ander.in;
cat ander.log;
pwd;
cd ../E0_U;
ls -l ander ander.band ander.data;
cat ander.in;
cat ander.log;
pwd;
cd ../../E-10_G/E-2_U/;
ls -l ander ander.band ander.data;
cat ander.in;
cat ander.log;
pwd;
cd ../E-1_U;
ls -l ander ander.band ander.data;
cat ander.in;
cat ander.log;
pwd;
cd ../E0_U;
ls -l ander ander.band ander.data;
cat ander.in;
cat ander.log;
pwd;

私はこのスクリプトをそのまま正常に実行できましたが、実際には私が提供したものよりも多くのディレクトリを使用しているので、より簡単で効率的な作成方法が必要です。私がこれを行う理由は、各サブディレクトリごとに各 "ander"ファイルの特定の履歴を維持する必要があるためです。デフォルトでは、このスクリプトを実行し、シェル>テキストをテキストファイルにエクスポートを使用して、ターミナルウィンドウに表示されているすべてをテキストファイルにエクスポートする予定です。そのため、各ディレクトリのレコードを番号順に並べ替えたいと思います。

どうすればスクリプトを効率的に作成できますか?これが私の目標です。

#!/bin/bash

cd parent_directory/;

do i= -11, -10 
   do j= -2, 0
      cd  E-i_G/E-j_U/;
      ls -l ander ander.band ander.data;
      cat ander.in;
      cat ander.log;
      pwd;
   end
end

私はこれがFortranでほとんど書かれていることを知っていますが、bashスクリプトにこれと同等または類似のものがありますか?私は「forループ」を使用しようとしましたが、最初のスクリプトと同じ結果を提供する方法で書くことはできないようです。

ベストアンサー1

cd parent_directory/

for i in {-11..-10}
do
   for j in -2 0
   do
      (
      cd  "E${i}_G/E${j}_U/"
      ls -l ander ander.band ander.data
      cat ander.in
      cat ander.log
      pwd
      )
   done
done

メモ:

  • 中カッコ表記を使用して数値範囲を繰り返すことができます。

    for i in {-11..-10}
    
  • 明示的な項目のリストを繰り返すこともできます。

    for j in -2 0
    
  • いくつかの場所が変数に依存するようにディレクトリを変更できます。

    cd  "E${i}_G/E${j}_U/"
    
  • このコマンドの引数は、cd現在のディレクトリに基づいてディレクトリを指定します。そのディレクトリで作業を終えたら、もう一度parent_directoryに変更しようとしています。これにはいくつかの方法がありますが、簡単な方法は、cdコマンドとそのディレクトリで実行されるコマンドを括弧で囲まれたサブシェルに入れることです。角かっこを終了すると、ディレクトリは自動的に以前の状態に復元されます。

おすすめ記事