Ich habe zwei Ordner: Ordner A – enthält insgesamt 1786 DM4-Dateien. Ordner B – enthält insgesamt 2131 TBZ-Dateien (Archivdateien der DM4s, die in Ordner A und B verfügbar sind) sowie 124 DM4-Dateien, die sich nicht in Ordner A befinden.
Ziel ist es, alle dm4s in einem Ordner zu haben und sicherzustellen, dass keines der dm4s fehlt, die eine TBZ-Datei in Ordner B haben. Wenn ich jedoch alle fehlenden 124 dm4-Dateien von Ordner B nach A kopiere, werden 1910 DM4-Dateien hinzugefügt. Mein Ordner B zeigt jedoch, dass ich 2131 TBZ habe. Das bedeutet, dass ich die Namen der verbleibenden 221 dm4-Dateien/TBZ-Dateien kennen muss, die in Ordner B vorhanden sind, damit ich weiß, dass sie in meiner Liste der dm4s fehlen.
Wie kann ich am schnellsten herausfinden, welche dm4s/tbz-Datei mir in diesem Fall fehlt?
Antwort1
Um sicherzugehen, dass ich das richtig verstehe: Ist das richtig?
Sie haben 2131 .tbz-Dateien und jede sollte eine entsprechende .dm4-Datei haben, z. B. „example-file-09.tbz“ „example-file-09.dm4“. Ihnen fehlen jedoch einige der entsprechenden dm4-Dateien und Sie müssen herausfinden, welche das sind.
Vorausgesetzt, das ist richtig, sollte es funktionieren (vorausgesetzt, Ihre Dateinamen enthalten keine Leerzeichen).
dm4_files="$(find A -name '*.dm4')"
for file in $(find B -name '*.tbz'); do
# || is a logical or operator; bash will only execute the right side if the left side fails (returns a non-zero exit code)
echo -e "$dm4_files" | grep -q "$(basename $file .tbz).dm4" || echo "Missing $(basename $file .tbz).dm4"
done
Bearbeiten: Anweisungen zum Ausführen aufgrund schlechter Kommentarformatierung hinzufügen
So führen Sie es von einem Terminal aus aus:
- Ändern Sie A und B oben in die vollständigen Pfade zu den betreffenden Verzeichnissen (alternativ wechseln Sie mit cd zu dem Verzeichnis, das beide enthält).
- Fügen Sie die Befehle ein
So führen Sie die Ausführung über ein Skript aus:
- Legen Sie die Befehle in eine Datei mit einem Namen wie check-dm4.sh im Verzeichnis mit A und B (das Suffix .sh hat keine Funktion, ist aber für Shell-Skripte üblich).
- Fügen Sie die folgende Zeile oben in der Datei ein (erste Zeile)
#!/bin/bash
- Markieren Sie die Datei als ausführbar (chmod +x check-dm4.sh oder mit Rechtsklick->Eigenschaften/wie auch immer Ihre Distribution es nennt) 4. Führen Sie die Datei aus