Ich habe eine Situation, wo es verschiedene Arten von Dateien (von unterschiedlicher Erweiterung) in einigen der Verzeichnisse gibt. Ich habe keine Ahnung, welcher Dateityp in einem bestimmten Verzeichnis vorhanden ist. Nehmen sich folgenden Fall annehmen:Wie Dateien nach ihrer Erweiterung zu analysieren
Es gibt einen gemeinsamen Weg für alle fünf Verzeichnisse 1, 2, 3, 4, 5, wie:
/dir1/dir2/dir3/1/
/dir1/dir2/dir3/2/
/dir1/dir2/dir3/3/
/dir1/dir2/dir3/4/
/dir1/dir2/dir3/5/
Kurz, 1, 2, 3, 4, 5 sind in dir3.
Als Beispiel
Verzeichnisse 1 und 3 haben Dateien mit der Erweiterung .txt
Verzeichnisse 2, 4, 5 haben Dateien mit der Erweiterung gz
ich dies ab sofort tun :
while [ $a -le 5 ]
do
cat /dir1/dir2/dir3/"$a"/*.txt | grep "string" > /path/output"$a"
zcat -f /dir1/dir2/dir3/"$a"/*.gz | grep "string" > /path/output"$a"
((a++))
done
Ausgänge werden erstellt, aber nur wenige von ihnen sind leer. Ich bin sicher, dass die Eingaben die Zeichenfolge haben, die ich in grep verwendet habe. Ich denke, das Skript, das ich verwende, überschreibt die Dateien.
Wie kann ich dies durchführen, indem ich zuerst die Dateiendung durchsuche und entweder cat oder zcat entsprechend ausführe? Bitte vorschlagen?
Edit:
Ich habe auch versucht, die folgenden:
while [ $a -le 5 ]
do
for f in /dir1/dir2/dir3/"$a"/*.txt
do
cat $f | grep "string" > /path/output"$a"
done
for f in /dir1/dir2/dir3/"$a"/*.gz
do
cat $f | grep "string" > /path/output"$a"
done
done
Ihr bearbeiteter Versuch sollte so lange funktionieren, wie Sie 'shopt -s nullglob' verwenden. Dies verhindert, dass die eine oder die andere "for" -Schleife überhaupt betreten wird. Wenn Sie, aus welchen Gründen auch immer, mit 'gz'- und' txt'-Dateien im selben Verzeichnis enden, überschreibt das Ergebnis der 'gz'-Schleife das Ergebnis der' txt'-Schleife. – chepner
@chepner Ja. Es funktioniert gut, wenn ich die Ausgabe in verschiedene Verzeichnisse umleite - eins für .txt und eins für .gz. – intruder