gunzip mehrere Archive in einen bestimmten Ordner

338
Delirium

Gibt es die Möglichkeit, mehrere Dateien in einen Ordner zu packen?

Ich habe viele Zugriffsprotokolle, die ich tun muss, um Ordner auszuführen. Dort abgelegt /var/log/nginx/und sie heißen wie. access.log.2.gz Aber es gibt eine knifflige Frage. Ich brauche alle Archive aus diesem Ordner aus einem bestimmten Monat.

Es gibt viele dieser Zugriffsprotokolle, und ich muss sie in das Verzeichnis extrahieren /var/log/nginx/target

Habe ich schon getestet

for f in *.gz; do STEM=$(access.log. "$" .gz) gunzip -c "$" > /var/log/nginx/target/"$" done 

Hat aber überhaupt nicht funktioniert ..

1
Warum nicht einfach "gunzip *", um jede der Dateien zu entpacken? Eine Datei namens access.log.XX.gz sollte sich in access.log.XX entpacken. Mit dem Platzhalterzeichen können Sie alle Dateien gleichzeitig verarbeiten. davidgo vor 7 Jahren 0
Es gibt etwa 60 Protokolldateien, die jeweils abweichendes Datum haben, ich brauche nur ab Juni .. deshalb auch :) Delirium vor 7 Jahren 0

2 Antworten auf die Frage

0
Ole Tange

Angenommen, Sie wissen nicht, welche Protokolle den Juni enthalten:

zcat *gz | grep Jun > junelog 
0
davidgo

Ich glaube, das Problem mit Ihrem Code liegt höchstwahrscheinlich in der Berechnung von STEM. Mir ist nicht sofort klar, in welchem ​​Format sich Ihre Dateien befinden oder wie Sie sie gruppieren werden. Versuchen Sie jedoch Folgendes:

# Find files created within date range: fromdate="201606010000" todate="201606302359" touch -t $fromdate /tmp/fromdate.del touch -t $todate /tmp/todate.del  # Extract only the desired files to destination, removing the .gz extension for f in `find /var/log/nginx/*.gz -type f -newer $fromdate ! -newer $todate` do zcat $f > /var/log/ngiz/target/$ done