を使用する代わりにfind
、検索基準が十分に単純であれば、bash を直接使用できます。例えば、
for file in *; do
processFiles "$file"
done
processFiles
各ファイルとディレクトリの名前を引数として、現在のディレクトリのすべてのファイルとディレクトリ (非表示のものを除く) に対して関数を実行します。すべてのファイル、ディレクトリ、およびサブディレクトリ (非表示のものを除く) に再帰的に適用する必要がある場合は、globstar シェル オプションを使用します。
#!/bin/bash
shopt -s globstar
shopt -s nullglob
updates=0
processFiles() {
((++updates))
}
for file in **; do
processFiles "$file"
done
echo "$updates"
ファイルだけが必要で、ディレクトリが必要ない場合は、これを for ループに挿入します。
[[ -f "$file" ]] || continue
file
がファイルでない場合 (つまり、ディレクトリなどの別のものである場合) は、ループを続行します。
変数 を展開して取得したディレクトリ内のファイルのみに一致させるにはpath
、次のように for ループを記述します。
for file in "$path"/*; do
(または"$path"/**
globstar を使用していて再帰が必要な場合)。
より複雑な検索条件が必要な場合は、いつでもextglob
オプションを使用できます。隠しファイルも含める必要がある場合は、dotglob
オプションを使用します。
bash の詳細については、リファレンス マニュアル、特に次のセクションを参照してください。
最後の注意: この 100% bash ソリューションが本当に気に入らず、OP のスクリプトに沿って何かを実行したい場合は、bash 変数を使用せずに (一時) ファイルを使用して、あるプロセスから別のプロセスに渡す必要がある値。これはかなりうまく機能する安価な IPC メソッドですが、安全に実装するのはより困難です。