
> 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
コメントでの議論によると、奇妙なファイル名は、ファイル名をパラメータとして他のスクリプトまたはプログラムを呼び出すスクリプトまたはプログラムに渡される必要があることがわかりました。したがって、ファイル名を引用符で囲むだけでは不十分です。シェルがこれらの引用符を削除し、次の呼び出しで引用符なしでファイル名が送信されるため、使用できなくなります。
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 の希望どおり、元のファイルは変更されません。