Ich führe einen Befehl aus einem Skript wie
tar -c -f ar.tar a b c d
wobei b, c und d möglicherweise nicht existieren und Verzeichnisse sein können. Die Lösungen, die ich mir ausgedacht habe, sind, die Ausgabe von an ls -d
zu leiten grep
, sie dann in den tar
Befehl zu spleißen oder erweiterte Globs für zu aktivieren @(a|b|c|d)
.
Gibt es eine bessere Möglichkeit, dies zu tun? Ich bin auf Debian Wheezy, die keinen --include
Parameter zu haben scheint .
--ignore-failed-read
Option?Antworten:
Du kannst es versuchen
wo
c
zum erstellenf ar.tar
Geben Sie die TAR-Datei an$(ls a b c d)
listet stdin auf, welche Dateien wirklich vorhanden sind (und gibt Fehler für andere)quelle
tar cf ar.tar $(ls -d a b c d 2>/dev/null)
funktioniert perfekt .. aber ich denke, es ist sauberer mit extglobextglob
Wenn es in Ordnung ist, den vollständigen Pfad der Dateien im Tar-Archiv zu haben, können Sie Folgendes tun:
Durch die
-e
Option zum erneuten Verknüpfen werden vorhandene Dateinamen kanonisiert und andere werden stillschweigend ignoriert.quelle
--strip-components
beim Extrahieren.Benutzen
Erläuterung
find
erfolgt die Rekursion.-o
steht für-or
. Oben bedeutet also, nach diesem oder diesem Platzhalter zu suchen. Wenn Sie nur ein Muster haben, brauchen Sie es nicht-o
.quelle