Lesen einer Datei mit Leerzeichen und Klammern im Namen -CLI

Lesen einer Datei mit Leerzeichen und Klammern im Namen -CLI

Ich würde gerne wissen, wie Sie einen > abc (1).binoder > abc (1).txtmehrere Dateinamen lesen. Die Dateien haben ein Leerzeichen und eine Klammer vor der Erweiterung .bin„oder“ .txt.

Zum Lesen der .bin-Datei habe ich ein Tool. Ich kann sie problemlos lesen, wenn ich das „Leerzeichen und (1)“ aus dem Dateinamen entferne. Aber wenn ich dieses Leerzeichen und den Klammernamen habe (1).bin, kann ich sie nicht lesen.

Wenn ich cateine .txtDatei habe, funktioniert es... aber mit der Datei funktioniert es nicht .bin. Nachfolgend sind die erforderlichen Tests aufgeführt:

$ cat full_logs-10.2.0.103-2018.02.07\ \(1\).txt 
hello,
this is a test.

--------xxxxxxx------xxxxxxx------------xxxxxxx--------

$ LogAnalyzeRebirth -p -x ./ full_logs-2018.02.07\ \(1\).bin 
usage: LogAnalyzeRebirth [-h] [-A] [-B] [-C] [-D] [-E] [-F]
                         [-G GRAPH [GRAPH ...]] [-H] [-I [HISTOGRAM]] [-L]
                         [-M] [-N] [-P [PDF]] [-R] [-S] [-T] [-U] [-V] [-b]
                         [-c] [-e] [--moo] [-f] [-g] [-i] [-k] [-l] [-m] [-n]
                         [-o] [-p PATH] [-q] [-r] [-s] [-t] [-v] [-x EXTRACT]
                         [-z]
LogAnalyzeRebirth: error: argument -p/--path: expected 1 argument(s)

--------xxxxxxx------xxxxxxx------------xxxxxxx--------

$ LogAnalyzeRebirth.py -p ./ -x "full_logs-10.2.0.103-2018.02.07 (1).bin" 

(\ /)                      (\ /)
( . .)      LogAnalyzeRebirth     (. . )
c(")(")                  (")(")o

sh: 1: Syntax error: "(" unexpected
sh: 1: Syntax error: "(" unexpected
sh: 1: Syntax error: "(" unexpected
Extract failed.
LogAnalyzeRebirth can't find full_logs-10.2.0.103-2018.02.07 (1).bin
No such file or directory : ./full_logs-10.2.0.103-2018.02.07 (1)/dmesg

---   Firmware_version   ---

No such file or directory : ./full_logs-10.2.0.103-2018.02.07 (1)/version.txt

--------xxxxxxx------xxxxxxx------------xxxxxxx--------

Antwort1

Aus der Diskussion in den Kommentaren ging hervor, dass der seltsame Dateiname an ein Skript oder Programm übergeben werden muss, das wiederum andere Skripte oder Programme mit dem Dateinamen als Parameter aufruft. Daher reicht es nicht aus, den Dateinamen in Anführungszeichen zu setzen, da die Shell diese Anführungszeichen entfernt und der nächste Aufruf den Dateinamen ohne Anführungszeichen überträgt, was ihn unbrauchbar macht.

doLogAnalyzeMeine Idee ist also, ein Wrapper-Skript für LogAnalyzeRebirth.py zu verwenden , etwa wie folgt:

#!/bin/bash
tmpfile=$(mktemp /tmp/LogAnalyzeRebirth.XXXXXX) # create temporary file
cp "$1" "$tmpfile"                              # copy to temporay file
LogAnalyzeRebirth.py -p ./ -x "$tmpfile"        # analyze copy
rm "$tmpfile"                                   # delete copy

Der Aufruf ./doLogAnalyze "full_logs-10.2.0.103-2018.02.07 (1).bin"sollte funktionieren, unabhängig davon, wie viele andere Programme im Hauptprogramm verwendet werden. Es werden keine Änderungen an den Originaldateien vorgenommen, wie es der Wunsch des OP war.

verwandte Informationen