小编Noe*_*uli的帖子

使用 Bash 将 XML 数据拆分为变量

我正在尝试从服务下载一些文件。这些文件位于 XML 文件中。XML 文件可以有一个文件或多个文件可供下载。但是,现在我的脚本有问题。我不知道如何将 XMLLINT 中的字符串拆分为数组,以便我可以单独下载每个文件。

我需要将字符串拆分为几个变量,然后下载 URL 字符串的每个文件。

但是文件 201701_1 不会重复,因此,我使用 curl 下载它们没有任何问题。但是文件coverage.zip 重复并且它们被curl 覆盖。我这样做:然后我做 curl 来下载单个文件。

curl -O -b cookie $URL 
Run Code Online (Sandbox Code Playgroud)

目前,我的脚本如下:

while read edition; do   XML="<?xml version=\"1.0\"
encoding=\"UTF-8\"?> <download-area>   <files>
    <file>
      <url>https://google.com/411/201701_01_01.zip</url>
    </file>
    <file>
      <url>https://google.com/411/201701_01_02.zip</url>
    </file>   </files> </download-area>
    "
    URL=$(echo $XML | xmllint --xpath \
    "/*[name()='download-area']/*[name()='files']/*[name()='file']/*[name()='url']/text()" -)

    echo "URL:: " $URL

done < $LATEST_EDITION
Run Code Online (Sandbox Code Playgroud)

LATEST_EDITION 只是一个带有行的文件。

我的问题是:如何将 VAR_1 和 VAR_2 拆分为多个 URL,以便我可以单独下载它们?如何防止coverage.zip 被覆盖?

scripting xml curl xmllint variable

5
推荐指数
1
解决办法
8190
查看次数

调用递归 bash 函数时出现分段错误

我有数百个多个文件夹,其中包含数千个 zip 文件,这些文件包含嵌套在 zip 文件中,如下面三个所示

\n\n
start tree structure\n012016/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 2016-01\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 2016-01\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 build\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 DOC\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 WONWA1\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 WO1NWA1\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 WO2016000001NWA1.xml\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 WO1NWA1.zip\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 WO2NWA1\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 WO2016000002NWA1_tr.xml\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 WO2NWA1.zip\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 2016-01.zip\n\nend tree structure\n
Run Code Online (Sandbox Code Playgroud)\n\n

我在下面创建了一个简短的脚本,它递归地检查文件夹和内容,如果找到任何 zip 文件,它就会提取内容,然后继续检查提取的文件夹的内容。

\n\n

当我尝试运行下面的脚本时:

\n\n
recurse() {\n    for i in "$1"/*;\n    do\n        currentItem="$i"\n        extension="${currentItem##*.}"\n\n        if [ -d "$i" ]; then\n            #echo "dir: $i"\n            recurse "$i"\n        elif [ -f "$i" ]; …
Run Code Online (Sandbox Code Playgroud)

shell bash function

3
推荐指数
1
解决办法
2万
查看次数

了解 Linux 环境反斜杠和星号的使用

我在 Linux 环境中有两个相关的问题。

我很困惑何时使用反斜杠\并结合星号“*”。当我尝试运行 Unzip *.zip 时,命令失败,直到我转义它。为什么会这样?

developer@tz:~/f$ bash -version
GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later 
developer@tz:~/f$ unzip *.zip
Archive:  abstract.zip
caution: filename not matched:  date-function.zip
developer@tz:~/f$ unzip \*.zip
Archive:  abstract.zip
  inflating: abstract.xsl            

Archive:  date-function.zip
warning [date-function.zip]:  zipfile is empty

1 archive was successfully processed.
1 archive had warnings but no fatal errors.
developer@tz:~/f$ ls *.zip
abstract.zip  date-function.zip
developer@tz:~/f$ ls \*.zip
ls: cannot access …
Run Code Online (Sandbox Code Playgroud)

zip shell-script

2
推荐指数
1
解决办法
370
查看次数

标签 统计

bash ×1

curl ×1

function ×1

scripting ×1

shell ×1

shell-script ×1

variable ×1

xml ×1

xmllint ×1

zip ×1