Lendo um arquivo com espaços e colchetes no nome -CLI

-1

Gostaria de saber se você tem um nome de arquivo > abc (1).bin ou > abc (1).txt files, como você os lê. Os arquivos estão com o espaço e o colchete antes da extensão .bin ou .txt .

Para ler o arquivo .bin eu tenho uma ferramenta, eu posso lê-la facilmente se eu remover o "espaço e (1)" do nome do arquivo. Mas quando eu tenho esse espaço e colchete (1).bin nome, eu não consigo lê-lo.

Quando eu cat a .txt file, funciona .. mas não funciona com o arquivo .bin . Abaixo estão os testes solicitados:

$ 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--------
    
por Imrank 08.02.2018 / 08:45

1 resposta

0

A discussão nos comentários mostrou que o nome do arquivo estranho tem que ser passado para um script ou programa que está chamando outros scripts ou programas com o nome do arquivo como um parâmetro. Portanto, colocar o nome do arquivo entre aspas não é suficiente, pois o shell remove essas aspas e a próxima chamada transmite o nome do arquivo sem aspas, tornando-o inutilizável.

Então, minha ideia é usar um script de wrapper doLogAnalyze para LogAnalyzeRebirth.py, assim:

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

Chamar ./doLogAnalyze "full_logs-10.2.0.103-2018.02.07 (1).bin" deve fazer o trabalho, independentemente de quantos outros programas são usados no programa principal. Nenhuma alteração é feita nos arquivos originais, como era o desejo do OP.

    
por muclux 08.02.2018 / 20:45