Ich habe die folgende Verzeichnisstruktur:
base/
files/
archives/
scripts/
Ich möchte ein Skript aus ausführen scripts/
, Dateien komprimieren , dass Spiel results.*.log
in files/
in ein gzip - tar - Archiv in archives/
.
Ich versuche den folgenden Befehl:
tar czfC ../archives/archive.tar.gz ../files results.*.log
Aber ich verstehe
tar: results.*.log: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors
Während
tar czfC ../archives/archive.tar.gz ../files results.a.log
funktioniert wie erwartet. Ebenfalls
tar czf ../archives/archive.tar.gz ../files/results.*.log
funktioniert so, wie ich es möchte, außer dass es das Präfix files/
zur Datei hinzufügt und auch eine Warnung ausgibt:
tar: Removing leading `../' from member names
Mein Fazit ist also, dass tar
Globbing bei Verwendung der -C
Option nicht richtig funktioniert . Irgendwelche Ratschläge, wie ich diese Arbeit auf einfache Weise mache?
cd
dies geschieht.&&
ist wie;
oder newline, es trennt zwei Befehle. Es ist so, als würde man sagen, dasscd
jeder Glob nach dem Ausführen Dateien im vorherigen Verzeichnis erweitern würde.Es gibt kein "Teer-Globbing", das Globbing erfolgt durch die Schale. Und die Shell hat keine Ahnung,
tar -C somedir
insomedir
welcher Funktion sie arbeiten wird. Alle Globs werden im aktuellen Verzeichnis erweitert.quelle
results.a.log
es in dem Verzeichnis vorhanden ist, in dem das Skript ausgeführt wird, funktioniert es tatsächlich . Aber ich verstehe nicht, warum dies passiert, da es-C
für change directory steht, also sollte das aktuelle Verzeichnis dasjenige mit seinresults.a.log
. Ich kann Ihre Antwort nicht akzeptieren, weil Sie keine Lösung anbieten.tar
Programm, das das Verzeichnis viel später ändert. Ich kann Ihr Problem leider nicht "lösen". Der einzige Ausweg besteht darin, in das Verzeichnis zu wechseln, in das Sie globalisieren möchten, oder das Globbing im Verzeichnis durchzuführen und die Ergebnisse in einer Datei oder Variablen zu speichern.Sie können das Globbing ausführen
find
und die Option "Verzeichnis ändern" weglassen,tar
indem Sie dasfiles/
Präfix entfernen, bevor Sie die Tarfile erstellen.Die
--no-recursion
Option totar
ist optional, da keine Verzeichnisse archiviert werden.quelle
Ich habe es endlich benutzt
quelle
Der Weg, dies zu tun, besteht darin, etwas wie das Folgende zu schreiben:
quelle
Es ist nicht Teer, der das Globbing macht, es ist die Schale. Sie fordern die Shell zuerst auf, Globbing durchzuführen, und dann Tar, das Verzeichnis zu wechseln. Da tar eine Liste von Dateinamen relativ zu den ursprünglichen Verzeichnissen erhält, funktioniert dies nicht.
Die mit Abstand einfachste Lösung besteht darin, die Shell das Verzeichnis ändern zu lassen. Interaktiv:
In einem Skript:
oder
quelle