Ich habe eine Verzeichnisstruktur wie diese
Code
├── cse701.tgz
└── cse701
├── cse701.md
├── CSE701.md
├── CSE701_pandoc.md
├── cse701.pdf
├── cse.pdf
├── default.yaml
├── html2tex.log
├── test.md
└── missing.md
Und das Tarball hat eine Struktur wie:
drwxrwxr-x zenith/zenith 0 2020-12-02 20:18 cse701/
-rw-rw-r-- zenith/zenith 0 2020-12-02 21:19 cse701/default.yaml
-rw-rw-r-- zenith/zenith 0 2020-12-02 21:19 cse701/CSE701.md
-rw-rw-r-- zenith/zenith 0 2020-12-02 21:19 cse701/CSE701_pandoc.md
-rw-rw-r-- zenith/zenith 0 2020-12-02 21:19 cse701/html2tex.log
-rw-rw-r-- zenith/zenith 0 2020-12-02 21:19 cse701/test.md
-rw-rw-r-- zenith/zenith 0 2020-12-02 21:19 cse701/cse701.pdf
-rw-rw-r-- zenith/zenith 0 2020-12-02 21:19 cse701/cse.pdf
-rw-rw-r-- zenith/zenith 0 2020-12-02 21:19 cse701/cse701.md
tar --diff -zf cse701.tgz cse701/
tar --compare -zf cse701.tgz ./cse701/
Die Optionen zum Vergleichen und Vergleichen wie indieser Beitragsollte darauf hinweisen, dass auf der Festplatte eine Datei fehlt, die nicht im Tarball enthalten ist.
AllerdingsGNU Tar-Dokumentegibt an, dass angezeigt wird, ob die Dateien geändert wurden, aber Dateien im Dateisystem ignoriert werden, die keine entsprechenden Mitglieder im Archiv haben. Wenn eine Datei im Archiv dargestellt ist, aber nicht im Dateisystem existiert, meldet tar einen Unterschied.
Wie finde ich heraus, ob dem Ordner nach der Erstellung des Tarballs neue Dateien hinzugefügt wurden?
Antwort1
Dies ist kein Einzeiler, aber es tut, was Sie wollen:
cd /path/to/Code
tar -tf cse701.tgz | sed 's#/$##' >tgz
find cse701 >fs
diff -uw fs tgz
rm fs
rm tgz
Erläuterung:
- Zunächst wechseln wir in das entsprechende Verzeichnis
- Dann listen wir den Inhalt von tar.gz auf und entfernen
/
es am Ende der Zeile (tar -t
fügt sie dort für Verzeichnisse ein). - Dann finden wir alle Dateien und Verzeichnisse im entsprechenden Dateisystem-Teilbaum (
find
setztNEIN/
es am Ende) - Wir vergleichen diese beiden Listen
- und aufräumen