![名前にスペースがある "find"ディレクトリをどのように処理しますか? [コピー]](https://linux33.com/image/60482/%E5%90%8D%E5%89%8D%E3%81%AB%E3%82%B9%E3%83%9A%E3%83%BC%E3%82%B9%E3%81%8C%E3%81%82%E3%82%8B%20%22find%22%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%82%92%E3%81%A9%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E5%87%A6%E7%90%86%E3%81%97%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
私はこれを持っています:
#!/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
良いかもしれません。-print0
xargs -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 ... +