首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XARGS:实用程序调用中的嵌套实用程序

XARGS:实用程序调用中的嵌套实用程序
EN

Stack Overflow用户
提问于 2016-07-28 21:06:08
回答 1查看 228关注 0票数 0

我正试图为一个大型数据库构建一个YAML文件,方法是在一个名字列表中加入xargs来打印。

我想在printf命令中调用ls来获取列表中每个名称的特定文件,但是对嵌套在printf命令中的ls的调用似乎不起作用。

以下命令

代码语言:javascript
复制
 cat w1.nextract.list | awk '{print $1}' | xargs -I {} printf "'{}':\n\tw1:\n\t\tanatomical_scan:\n\t\t\tAnat: $(ls $(pwd)/{})\n"

只提供以下错误

代码语言:javascript
复制
ls: cannot access '/data/raw/long/{}': No such file or directory

后面跟着如下所示的输出:

代码语言:javascript
复制
'149959':
    w1:
        anatomical_scan:
            Anat: 

我希望能够使用xargs的标准输入,以便在嵌套实用程序命令中使用,为我提供一个自动完成必要文件的路径。(即)

代码语言:javascript
复制
'149959':
    w1:
        anatomical_scan:
            Anat: /data/raw/long/149959/test-1/test9393.txt

有人有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2022-09-07 16:51:44

有人有什么想法吗?

有几个注意事项的更安全的方法是:

代码语言:javascript
复制
% cat w1.nextract.list | \
    sed -e 's#^\(^[^/]*\)/\(.*\)$#'\''\1'\'':\n    w1:\nANA-SCAN\nANAT-PWD\1/\2#' \
        -e "s#ANAT-PWD#            Anat: `pwd`/#" \
        -e 's/ANA-SCAN/        anatomical_scan:/'

对w1.nextract.list文件的内容有限制:

  • 这些行都不可能包含散列('#')字符。
  • 行上的任何其他特殊字符都可能不安全。

为了进行测试,我创建了带有一个条目的w1.nextract.list文件:

代码语言:javascript
复制
149959/test-1/test9393.txt

由此产生的输出如下:

代码语言:javascript
复制
'149959':
    w1:
        anatomical_scan:
            Anat: /data/raw/long/149959/test-1/test9393.txt

你能更详细地解释一下吗?是什么让这个如此脆弱?

如果输入文件具有特殊字符或转义序列,则使用xargs打印结果可能会导致意外结果。然后,一个错误的参与者可以修改您的输入文件来利用这个问题。最好的做法是避免。

脆弱性来自于维护w1.nextract.list文件。您可以自动生成文件以减少此问题:

代码语言:javascript
复制
cd /data/raw/long/; find * -type f -print

什么是真正的YAML实现?

yq命令是YAML实现的一个示例。您可以使用它来创建.yaml文件。

我以前还没有使用过这类python包,所以这是第一次使用这种方法解决方案。

使用python、perl或甚至php将允许您手工创建文件,而不必担心文件名中的不安全字符。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38646743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档