Ho due cartelle con strutture di sottocartella simili, che vorrei confrontare. Per esempio:
A
├── child-1
├── child-2
├── child-3
├── child-4
├── child-5
e
B
├── child-1-some-text
├── child-2-more-text
├── child-3-nothing
├── child-6-random-text
├── child-7-more-random-text
Vorrei elencare tutte quelle sottocartelle da A
cui sono prefissi una sottocartella B
e anche elencare le relative sottocartelle B
. L'output previsto è
child-1 -- child-1-some-text
child-2 -- child-2-more-text
child-3 -- child-3-nothing
Un requisito secondario: se si verificano più corrispondenze B
, dovrebbe essere visualizzato un errore / avviso.
La mia soluzione :
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
Problema:
Per quei valori di $f
, che non hanno sottocartelle corrispondenti in B
, la costruzione dell'array mi sta dando un errore. per esempio:
ls: impossibile accedere a "child-4 *": nessun file o directory
Domanda
- Come sbarazzarsi di questi errori?
- Esiste un modo migliore per raggiungere gli obiettivi rispetto a quello nel mio codice?
Grazie in anticipo!
diff -rq DIR1 DIR2
per confrontare non solo la struttura delle directory, ma i contenuti dei file.