
Me gustaría saber si tienes un nombre de archivo > abc (1).bin
o > abc (1).txt
archivos, cómo los lees. Los archivos están con el espacio y corchete antes de la extensión .bin
o .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).bin
nombre entre corchetes, no puedo leerlo.
Cuando busco cat
un .txt
archivo, funciona... pero no funciona con el .bin
archivo. 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 doLogAnalyze
para 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.