可能なすべてのサブディレクトリでbashコマンドを実行するには?

可能なすべてのサブディレクトリでbashコマンドを実行するには?

私のホームディレクトリが次のようになるとしましょう。/home/test

その下には多くのサブディレクトリがあり、そのサブディレクトリの下には多くのサブディレクトリなどがあります。

例:

/home/test
/home/test/subdir1
/home/test/subdir1/subdir2
/home/test/subdir1/subdir2/subdir3
/home/test/subdir1/subdir2/subdir4
/home/test/subdir1/subdir2/subdir4/subdir5

など...

私は各ディレクトリを受け入れ、単にコマンドを実行する簡単なスクリプトが欲しいですpwd

ベストアンサー1

並列ソリューションの使用

小型で高速なソリューションにはGNU Parallelを使用できます。

find . -type d -print0 | parallel -0 cd {}'&&' <command-name>

これは、スペースと改行文字を含むディレクトリ名にも絶対に機能します。これが何をするかは、各ディレクトリparallelから出力を取得してから。その後、ディレクトリの変更が成功すると、このディレクトリで別のコマンドが実行されます。find{}

whileループを使用する一般的なソリューション

find "$PWD" -type d | while read -r line; do cd "$line" && <command-name>; done;

$PWD変数には以下が含まれているため、ここではこれが使用されます。絶対パスコマンドが実行される現在のディレクトリ。絶対パスを使用しないと、cdwhileループでエラーが発生する可能性があります。

これはより簡単な解決策です。ディレクトリ名に奇妙な文字(改行文字など)が含まれていない限り、ほとんどの場合動作します(コメントを参照)。

おすすめ記事