Ich habe zwei Ordner mit ähnlichen Unterordnerstrukturen, die ich vergleichen möchte. Beispielsweise:
A
├── child-1
├── child-2
├── child-3
├── child-4
├── child-5
und
B
├── child-1-some-text
├── child-2-more-text
├── child-3-nothing
├── child-6-random-text
├── child-7-more-random-text
Ich möchte alle Unterordner auflisten, aus A
denen ein Unterordner vorangestellt ist, B
und auch die entsprechenden Unterordner auflisten B
. Die erwartete Ausgabe ist
child-1 -- child-1-some-text
child-2 -- child-2-more-text
child-3 -- child-3-nothing
Eine sekundäre Anforderung: Wenn mehrere Übereinstimmungen vorliegen B
, sollte ein Fehler / eine Warnung ausgegeben werden.
Meine Lösung :
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
Problem:
Für die Werte von $f
, die keine entsprechenden Unterordner enthalten B
, gibt mir die Array-Konstruktion einen Fehler. z.B:
ls: kann nicht auf 'child-4 *' zugreifen: Keine solche Datei oder kein solches Verzeichnis
Frage
- Wie kann man diese Fehler beseitigen?
- Gibt es einen besseren Weg, um die Ziele zu erreichen als das in meinem Code?
Danke im Voraus!
diff -rq DIR1 DIR2
damit nicht nur die Verzeichnisstruktur, sondern auch den Dateiinhalt vergleichen.