すべてのサブディレクトリからソフトウェアをインストールする

すべてのサブディレクトリからソフトウェアをインストールする

私はUbuntuに初めてアクセスし、小規模なプロジェクトのためにインストールしました。パッケージを含む約30個のtarアーカイブを抽出し、今ではソースコードとconfigureファイルを含む多くのディレクトリがあります。

すべてのサブディレクトリをすばやく繰り返し、各サブディレクトリで設定シェルスクリプトを実行する方法は?

これまで、フォルダを循環して構成スクリプトを実行するためにシェルスクリプト(i.shと呼ばれる)を作成してみましたが、役に立ちませんでした。これを修正する方法はありますか?どのように実行しますか?

find . -type d | while read d; do
    ./configure
    make
    sudo make install
done

端末に入り、実行して実行しましたsudo bash ./i.sh

ありがとうございます!

答え1

現在のディレクトリのすべてのディレクトリを繰り返すには、より単純なループを使用します。

for dir in ./*/; do
   # more here
done

このパターンは、./*/現在のディレクトリ内のサブディレクトリと一致します。

ここで使用すると、解凍されたアーカイブ内でサブディレクトリが見つかるため、find間違った操作を実行する可能性が高くなります。tar

各ディレクトリに対してそのディレクトリに移動して、次のものを構築しよう$dirとします。cd

for dir in ./*/; do
    ( cd "$dir" && ./configure && make && sudo make install )
done

括弧を使用すると、コマンドはサブシェルで実行されます。サブシェル内のディレクトリの変更はサブシェルの外側に反映されないため、「cd戻り」は必要ありません。

&&(「and」)を使用してコマンドを一緒に接続します。つまり、1 つのコマンドが失敗した場合、後続のコマンドはまったく実行されません。

sudoあなたはこれを使用しないでしょう可能このステップにはroot権限が必要make installですsudo

/usr/localデフォルトでは、以下のすべての項目がインストールされます。別のインストールプレフィックスにインストールするには、たとえば--prefix=$HOME/localwithを使用しますconfigure(つまり、必要ではないことを意味します)。sudo 別の言葉、既にホームディレクトリに書き込み権限があるからです)。

関連情報