Ich habe viele Dateien, die ich in ein einziges Verzeichnis packen muss. Ich möchte nicht alle Dateien im Verzeichnis komprimieren, sondern nur diejenigen, die einer bestimmten Abfrage entsprechen.
Ich tat
grep abc file-* > out.txt
um eine Datei mit allen Instanzen von "abc" in jeder Datei zu erstellen. Ich brauche die Dateien selbst. Wie kann ich bash anweisen, nur diese Dateien zu komprimieren?
grep abc file-* > out.txt
eine Datei mit allen Instanzen von "abc" in jeder Datei erstellt. Ich brauche die Dateien selbst.zip ZipFile.zip file-*
, ist der naheliegende Weg, dies zu tun. Sie benötigen eine Zwischendatei nur, wenn Sie eine komplexefind
oder eine Verkettung von Dateilisten aus verschiedenen Suchvorgängen verwenden.Antworten:
Sehr einfach:
Das heißt, wenn Ihre
out.txt
Datei einen Dateinamen pro Zeile enthält. Alle Dateien aus werdenout.txt
zu einem Archiv mit dem Namen hinzugefügtarchive.zip
.Die
-@
Option ermöglicht daszip
Lesen von STDIN.Wenn Sie das Erstellen einer temporären
out.txt
Datei überspringen möchten , können Sie diegrep
Funktion zum Drucken von Dateinamen ebenfalls verwenden.-r
Aktiviert die rekursive Suche (in Ihrem Fall möglicherweise nicht erforderlich) und gibt-l
nur Dateinamen aus:quelle
cat out.txt | while read line ; do xargs zip archive.zip $line ; done
zip archive.zip $(ls common_name*)
Alternativen zur akzeptierten Antwort von hier :
quelle