バックスラッシュとスペースを処理するように検索関数ループをどのように変更しますか? [コピー]

バックスラッシュとスペースを処理するように検索関数ループをどのように変更しますか? [コピー]

現在のディレクトリ内のすべてのファイルを解析しようとしています。検索機能はありますが、空白のあるファイルディレクトリをループに解析できないようです。"$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改行文字の代わりに行末文字としてヌルバイト(によって生成された)を使用してください。

おすすめ記事