私の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
コマンドとそのディレクトリで実行されるコマンドを括弧で囲まれたサブシェルに入れることです。角かっこを終了すると、ディレクトリは自動的に以前の状態に復元されます。