

お疲れ様です。

本題ですが以下のようなコードがあるとします。

[code]

    #!/bin/bash
    
    file_name=test.txt
    
    while read line; do
        dir=${line}
    
        while read red; do
             echo "動作確認:${red}"
         done < <(find ${dir} -type f)
    
    done<${file_name}
    
[/code]

これを実行すると「find: ‘ディレクトリ名’: そのようなファイルやディレクトリはありません」というエラーが出ます。

これを解決するにはどうすればよろしいでしょうか？

補足：  
test.txt の中にはディレクトリパスが書いてあります。  
それを「find」のパスに指定し、そのディレクトリ以下のファイルを検索したいです。

[code]

    #!/bin/bash
        dir="ディレクトリパス"
        while read red; do
             echo "動作確認:${red}"
        done < <(find ${dir} -type f)
    
[/code]

上記のように書くと上手くいきます。

エラーメッセージを見ると「'」かなにかがくっついてしまってるっぽいのですが、対処法が分かりません。

以上、よろしくお願いいたします。


CC BY-SA 4.0
2018-10-25T06:25:57.580
49644
2019-05-16T15:39:59.083
2018-10-25T09:42:27.607
2238
30685
question
bash shellscript
find のパスに変数を指定したい


`find`コマンドの部分を`()`ではなく````(バッククォート)でくくってみてください。  
該当箇所だけ抜粋すると…

[code]

    while read red; do
        echo "動作確認:${red}"
    done < `find ${dir} -type f`
    
[/code]

**実行環境**  
bash 3.2  
RHEL 5.11


CC BY-SA 4.0
2018-10-25T06:38:34.813
49645
2018-10-25T06:38:34.813
3060
49644
answer


`find`(1) は指定された走査対象のパスが存在しないとそのような警告を表示します。`find` に渡す前に存在するかどうか検査すればよいだけですね。

[code]

    #!/bin/bash
    
    exec <dir.txt
    while IFS= read -r d; do
      [[ -d $d ]] || continue
      find "$d" -type f -exec sh -c 'for file in "$@"; do echo "動作確認:$f"; done' sh {} +
    done
    
[/code]


CC BY-SA 4.0
2019-05-16T15:39:59.083
55024
2019-05-16T15:39:59.083
3061
49644
answer