我想知道您是否有文件名> abc (1).bin
或文件,您如何读取它们。这些文件的扩展名> abc (1).txt
前有空格和括号。.bin
.txt
我有一个工具可以读取 .bin 文件,只要从文件名中删除“空格和 (1)”,就可以轻松读取它。但是当我有这个空格和括号(1).bin
名称时,我就无法读取它。
当我cat
使用文件时.txt
,它可以工作。但它不适用于文件.bin
。以下是要求的测试:
$ 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--------
答案1
评论中的讨论表明,必须将奇怪的文件名传递给脚本或程序,而该脚本或程序本身正在使用文件名作为参数调用其他脚本或程序。因此,将文件名括在引号中是不够的,因为 shell 会删除这些引号,并且下一个调用会传输不带引号的文件名,使其无法使用。
所以我的想法是使用doLogAnalyze
LogAnalyzeRebirth.py 的包装脚本,如下所示:
#!/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
调用./doLogAnalyze "full_logs-10.2.0.103-2018.02.07 (1).bin"
应该可以完成工作,无论主程序中使用了多少其他程序。正如 OP 所希望的那样,原始文件不会发生任何变化。