サブフォルダー構造が似ている2つのフォルダーがあります。比較したいと思います。例えば:
A 
├── child-1
├── child-2
├── child-3
├── child-4
├── child-5
そして
B 
├── child-1-some-text
├── child-2-more-text
├── child-3-nothing
├── child-6-random-text
├── child-7-more-random-text
のサブフォルダーのAプレフィックスであるすべてのサブフォルダーBを一覧表示し、対応するサブフォルダーBも同様に一覧表示します。期待される出力は
child-1 -- child-1-some-text
child-2 -- child-2-more-text
child-3 -- child-3-nothing
2番目の要件:複数のがで一致する場合B、エラー/警告が表示されます。
私の解決策:
cd A
for f in `ls -d */`; 
do
    cd B;
    new_dirs=(`ls -1d $f*`);
    cd -;
    if [ ${#new_dirs[@]} -eq 0 ]
    then
        ## DO_Nothing
        continue;
    elif  [ ${#new_dirs[@]} -gt 1 ]
    then
        echo "Multiple matches to $f";
        continue;
    else
        echo "Unique Match found to $f -- ${new_dirs[0]}";
        continue;
    fi;    
done
問題:
に$f対応するサブフォルダーがないの値の場合B、配列の構築によりエラーが発生します。例えば:
ls: 'child-4 *'にアクセスできません:そのようなファイルまたはディレクトリはありません
質問
- これらのエラーを取り除く方法は?
- コード内のものよりも目的を達成するためのより良い方法はありますか?
前もって感謝します!
                
                4
              
                  ほぼ機能するソリューションを提供するための+1!
                
                
                  
                    —
                    user5325 
                    
                  
                
              
                  これは特定の質問に対する回答ではありませんが、
                
                  
                    —
                    jrw32982は、
                    
                  
                
              diff -rq DIR1 DIR2ディレクトリ構造だけでなくファイルの内容を比較するために使用できます。