bash 脚本处理含有错误字符的文件

bash 脚本处理含有错误字符的文件

我收到了一个 zip 文件,其文件夹结构包含括号。我在 cli 上完成了两个流程,现在将它们合并为一个脚本

首先在文件结构中搜索特定文件,纠正括号,然后通过管道传输到 tshark 进行处理。我使用 sed 的输出在 stoud 上有效,但管道 tshark 不喜欢我抛出的路径。

find <path> -iname *.cap |sed 's/(/\\(/' |sed 's/)/\\)/'

采用 folder/folder(description)/file.cap 生成 folder/folder(description)/file.cap cool!

当我将它添加到 bash 脚本中时

#/BIN/BASH

capfiles=($(find <path> -iname *.cap | sed ’s/(/\\(/‘ |sed ’s/)/\\)/‘))

for i in “${capfiles[@]}”;do
     tshark -r $i -T fields -e dns.qry.name |sort u > $i.uniquefqdns2lookup.txt

done

我明白了

'tshark: The file "folder/folder\(description\)/file.cap" doesn't exist.
'tshark: The file folder/folder\(description\)/file.cap" doesn't exist.
'tshark: The file folder/folder\(description\)/file.cap" doesn't exist. 

我尝试在补丁中使用 ./ 作为显式字符,但没有成功。输出如下所示:

'tshark: The file "./"folder/folder\(description\)/file.cap" doesn't exist.
'tshark: The file "./folder/folder\(description\)/file.cap" doesn't exist.
'tshark: The file "./folder/folder\(description\)/file.cap" doesn't exist. 

我遗漏了什么?我完全不明白这一点吗?

答案1

除了 KasiyA 的评论外,

  • 确保您的引号正确。在您的问题中,模式sed以反引号 (`) 而不是正引号 (') 结尾。我不知道您的脚本中是否确实如此。
  • 将 放在$i双引号 ( "$i") 中(参见这个答案)。
  • 您可能实际上不需要反斜杠,这取决于 tshark 的设置。使用将保留文件名中的括号。Tshark 可能正在寻找名称中"$i"包含文字的文件。尝试\

    capfiles=($(find <path> -iname *.cap )
    

看看你得到了什么。

相关内容