Leer un archivo con espacios y corchetes en el nombre -CLI

Leer un archivo con espacios y corchetes en el nombre -CLI

Me gustaría saber si tienes un nombre de archivo > abc (1).bino > abc (1).txtarchivos, cómo los lees. Los archivos están con el espacio y corchete antes de la extensión .bino .txt.

Para leer el archivo .bin tengo una herramienta, puedo leerlo fácilmente si elimino el "espacio y (1)" del nombre del archivo. Pero cuando tengo este espacio y (1).binnombre entre corchetes, no puedo leerlo.

Cuando busco catun .txtarchivo, funciona... pero no funciona con el .binarchivo. A continuación se detallan las pruebas solicitadas:

$ 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--------

Respuesta1

La discusión en los comentarios mostró que el extraño nombre de archivo debe pasarse a un script o programa que a su vez llama a otros scripts o programas con el nombre de archivo como parámetro. Por lo tanto, encerrar el nombre del archivo entre comillas no es suficiente ya que el shell elimina estas comillas y la siguiente llamada transmite el nombre del archivo sin comillas, haciéndolo inutilizable.

Entonces mi idea es usar un script contenedor doLogAnalyzepara LogAnalyzeRebirth.py, como este:

#!/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

La llamada ./doLogAnalyze "full_logs-10.2.0.103-2018.02.07 (1).bin"debería hacer el trabajo, independientemente de cuántos otros programas se utilicen dentro del programa principal. No se realizan cambios en los archivos originales, como era el deseo del OP.

información relacionada