C201201A/RA/、C201202A/RB など、複数のディレクトリとサブディレクトリがあります。そのため、setphase.shをすべてのサブディレクトリにコピーして実行したいと思います。私は次のコードを試しました
#!/bin/bash
ls -d */*/ > folders.txt
no=1
while read folder
do echo $folder
cp setphase.sh $folder
sh setphase.sh
no=`expr $no + 1`
done < folders.txt
どこに書くべきですかsh setphase.sh
?
ベストアンサー1
スクリプトが実際にディレクトリに存在する必要がない場合(非常に少数のスクリプトがあり、...あるスクリプトはほとんど間違って作成され、修正が必要です)オプションを使用してfind
各-execdir
ディレクトリでスクリプトを実行できます。たとえば、
find . -mindepth 2 -maxdepth 2 -type d -execdir /path/to/setphase.sh \;
GNUのfind
マニュアルページから:
-execdir command ;
-execdir command {} +
に似ています
-exec
が、指定されたコマンドは通常、起動したディレクトリではなく一致するファイルを含むサブディレクトリで実行されますfind
。これは、一致するファイルへのパスを解析する際に競合状態を回避するため、コマンドを呼び出すより安全な方法です。
-exec
アクションと同様に、フォームは複数の一致するファイルを処理するコマンドラインを作成+
し-execdir
ますが、指定されたコマンド呼び出しは同じサブディレクトリに存在するファイルのみを一覧表示します。このオプションを使用する場合は、
$PATH
環境変数が参照されないようにする必要があります.
。それ以外の場合は、攻撃者が実行するディレクトリに適切な名前のファイルを残して、必要なコマンドを実行できます-execdir
。$PATH の項目が空である場合、または絶対ディレクトリ名でない場合も同様です。呼び出しが終了状態としてゼロ以外の値を返す場合、ゼロ以外の終了
find
状態が返されます。エラーが発生するとfind
すぐに終了する可能性があるため、保留中の一部のコマンドがまったく実行されない可能性があります。ジョブの結果は、ジョブが使用されているかバリアントが使用されているかによって異なります
+
。 true は常に返されますが、コマンドが 0 を返す場合にのみ true です。;
-execdir command {} +
-execdir command {} ;