現在のディレクトリ内のすべてのファイルを解析しようとしています。検索機能はありますが、空白のあるファイルディレクトリをループに解析できないようです。"$DIR"
私が検索したいディレクトリは次のとおりです。誰でもこれがうまくいくように修正する方法を知っていますか?ありがとうございます。
for file in $(find "$DIR" -type f)
do
echo "$file"
done
答え1
find ... | xargs ...
どちらfind ... -exec ...
もこれより良いオプションです。シェルループを使用して検索結果を正しく繰り返すには、ループを使用する必要がありますwhile read
。
while IFS= read -d '' -r filename; do
echo "$filename"
done < <(find "$dir" -type f -print0)
そこには解くべき内容がたくさんあります。
- 私たちはプロセスの交換find コマンドを実行すると、結果をファイルのように読み取ることができます。
- 入力行をそのまま読むには、bashイディオムはです
IFS= read -r line
。これにより、任意のスペースとバックスラッシュを変数として読み取ることができます。 read -d ''
-print0
改行文字の代わりに行末文字としてヌルバイト(によって生成された)を使用してください。
答え2
for
これを繰り返す必要はありません。
find "$dir" -type f
デフォルトでは、見つかったすべてのオブジェクトが出力されます。
これにより、これを明確にすることができます。
find "$dir" -type f -print
もしあなたなら本物これを繰り返すには、空の区切り文字を使用して次のようにしますxargs
。
find "$dir" -type f -print0 | xargs -0 -n1 echo
またはfind
あなた自身の-exec
:
find "$dir" -type f -exec echo "{}" \;
答え3
あなたはする必要があります出力を解析しません。find
あなたも同じ理由で解析しないでくださいls
次の代わりにfind
/を試してください。exec
find "$DIR" -type f -exec echo {} \;