サブフォルダー構造が似ている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
ディレクトリ構造だけでなくファイルの内容を比較するために使用できます。