名前にスペースがある "find"ディレクトリをどのように処理しますか? [コピー]

名前にスペースがある "find"ディレクトリをどのように処理しますか? [コピー]

私はこれを持っています:

#!/bin/bash

for file in `find . -type d`
do
  echo $file
done

というディレクトリだけがある場合、My Directory出力は次のようになります。

My
Directory

どうすれば解決できますか?

これはecho $file一時的なものです。また、ディレクトリで動作する他のコードもあります。

答え1

以下のような作品...

find . -type d | while read dir; do echo $dir; done
.
./my dir

実行している作業に応じて、オプションとを使用する方がfind良いかもしれません。-print0xargs -0

得られたコードは引用符で囲まれていない出力を取得し、それを繰り返すfind単語のリスト(スペースで区切ります)として使用します。for

答え2

forループを使用する代わりに、while次を使用します。

find . -type d -print0 | while read -d '' -r dir; do echo "$dir"; done

オプションは、print0ファイル/ディレクトリ名の末尾にNULL文字(改行文字ではなく)を印刷し、read -d ''それを正しく解釈します。

答え3

例では、「$file」を使用できます。

答え4

答えに答える前に、次の2つの質問を読んでください。

問題の場合、ループは必要ありませんので、for自分で見つけてください。

find -type d

さらに作業を行うには、-exec次のオプションを使用してください(またはサポートが-execdirある場合find)。

find -type d -exec ... +

関連情報