【问题标题】:A shell script to run a process on linux在 linux 上运行进程的 shell 脚本
【发布时间】:2014-03-30 21:21:48
【问题描述】:

问题: 我对 shell 脚本非常陌生。我有两个目录 A 和 B,每个目录包含大约 100 个文件。文件夹 A 和 B 中的文件具有完全相同的名称,但内容不同,因为它们是来自不同服务器的 xml 响应。 我有一个 xmldiff 实用程序,可以找到这些文件中的差异并为差异生成另一个文件 result.xml,它适用于以下命令:

 xmldiff A/file1.xml B/file1.xml Result/result1.xml

所以,我需要一个循环遍历文件夹 A 和 B 的 shell 脚本,从每个文件夹中选择 filename1, 将其传递给 xmldiff 并获取 result.xml....(对于所有 100 个文件)

【问题讨论】:

    标签: xml linux shell command-line process


    【解决方案1】:
    #!/bin/bash
    
    APP="xmldiff"
    A="folder path"
    B="folder path"
    result="folder path"
    
    
    # This function extract the basename  /path/to/basename.ext -> basename
    getBaseName(){
    local name="$1"
    basename=`echo "$name" | sed -r -e "s/.+\/([^\/]+)\.[^\.]+$/\1/"`
    echo "$basename"
    }
    
    for _file in $A/*
    do 
    filename=`getBaseName "$_file"`
    # I'm assuming here that you have only xml files ending in .xml
    "$APP" "$A/${filename}.xml" "$B/${filename}.xml" "$result/${filename}_result.xml"
    
    done
    

    注意:将其复制到新的文本文件中。然后从 cmdline 输入:chmod +x yourfilename。从同一文件夹执行:./yourfilename

    【讨论】:

    • 您可以考虑在所有文件名和路径周围加上双引号,以防它们包含空格,例如"$A/${文件名}.xml"
    • 您可能会发现在开始时 cd "$A" 并从那里开始工作比从其他地方循环访问 $A/* 更容易。
    • 非常感谢。小心目录和文件名中的空格。如果你可以在 *nix 中使用,你可以避免使用空格...
    • 我正在使用 ksh,但由于某种原因,“local”关键字不起作用。我收到以下错误:-ksh: local: not found [No such file or directory]
    • 删除“本地”或用排版替换。见stackoverflow.com/questions/12000949/scope-of-variables-in-ksh
    【解决方案2】:

    快速而肮脏的解决方案,如果 A 和 B 中的文件具有相同的名称

    (cd A;find . -name \*xml -print0) | xargs -0 -n1 -I % echo xmldiff ./{A,B,Result}/"%"
    

    尝试 DRY-run 1st - 如果满意,删除 echo

    【讨论】:

      【解决方案3】:

      假设您的文件名完全相同,简单的解决方案可能是,

      A=absolute path for A
      B=absolute path for B
      Result=absolute path for Result
      
      for filename in `ls A\`
      do
        xmldiff A/${filename} B/${filename} Result/${filename}_Result.xml
      done
      

      这应该适用于特定目的。

      【讨论】:

        猜你喜欢
        • 2014-10-06
        • 1970-01-01
        • 1970-01-01
        • 2015-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-20
        • 1970-01-01
        相关资源
        最近更新 更多