名前にスペースと括弧を含むファイルの読み取り -CLI

名前にスペースと括弧を含むファイルの読み取り -CLI

> 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 の希望どおり、元のファイルは変更されません。

関連情報