У мене є дві папки з подібними структурами підпапок, які я хотів би порівняти. Наприклад:
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
Вторинна вимога: Якщо декілька збігаються 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 *': такого файлу чи каталогу немає
Питання
- Як позбутися від цих помилок?
- Чи є кращий спосіб досягти мети (цілей), аніж у моєму коді?
Спасибі заздалегідь!
diff -rq DIR1 DIR2
для порівняння не просто структури каталогів, а вмісту файлу.