J'ai deux dossiers avec des structures de sous-dossiers similaires, que je voudrais comparer. Par exemple:
A
├── child-1
├── child-2
├── child-3
├── child-4
├── child-5
et
B
├── child-1-some-text
├── child-2-more-text
├── child-3-nothing
├── child-6-random-text
├── child-7-more-random-text
Je voudrais répertorier tous les sous-dossiers A
dont le préfixe est un sous-dossier B
et répertorier également les sous-dossiers correspondants B
. La sortie attendue est
child-1 -- child-1-some-text
child-2 -- child-2-more-text
child-3 -- child-3-nothing
Une exigence secondaire: s'il y a plusieurs correspondances B
, cela devrait donner une erreur / un avertissement.
Ma solution :
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
Problème:
Pour ces valeurs de $f
, qui n'ont pas de sous-dossiers correspondants B
, la construction du tableau me donne une erreur. par exemple:
ls: impossible d'accéder à 'child-4 *': aucun fichier ou répertoire de ce type
Question
- Comment se débarrasser de ces erreurs?
- Existe-t-il un meilleur moyen d'atteindre le (s) but (s) que celui de mon code?
Merci d'avance!
diff -rq DIR1 DIR2
pour comparer non seulement la structure du répertoire, mais le contenu du fichier.