我正试图为一个大型数据库构建一个YAML文件,方法是在一个名字列表中加入xargs来打印。
我想在printf命令中调用ls来获取列表中每个名称的特定文件,但是对嵌套在printf命令中的ls的调用似乎不起作用。
以下命令
cat w1.nextract.list | awk '{print $1}' | xargs -I {} printf "'{}':\n\tw1:\n\t\tanatomical_scan:\n\t\t\tAnat: $(ls $(pwd)/{})\n"只提供以下错误
ls: cannot access '/data/raw/long/{}': No such file or directory后面跟着如下所示的输出:
'149959':
w1:
anatomical_scan:
Anat: 我希望能够使用xargs的标准输入,以便在嵌套实用程序命令中使用,为我提供一个自动完成必要文件的路径。(即)
'149959':
w1:
anatomical_scan:
Anat: /data/raw/long/149959/test-1/test9393.txt有人有什么想法吗?
发布于 2022-09-07 16:51:44
有人有什么想法吗?
有几个注意事项的更安全的方法是:
% 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文件:
149959/test-1/test9393.txt由此产生的输出如下:
'149959':
w1:
anatomical_scan:
Anat: /data/raw/long/149959/test-1/test9393.txt你能更详细地解释一下吗?是什么让这个如此脆弱?
如果输入文件具有特殊字符或转义序列,则使用xargs打印结果可能会导致意外结果。然后,一个错误的参与者可以修改您的输入文件来利用这个问题。最好的做法是避免。
脆弱性来自于维护w1.nextract.list文件。您可以自动生成文件以减少此问题:
cd /data/raw/long/; find * -type f -print什么是真正的YAML实现?
yq命令是YAML实现的一个示例。您可以使用它来创建.yaml文件。
我以前还没有使用过这类python包,所以这是第一次使用这种方法解决方案。
使用python、perl或甚至php将允许您手工创建文件,而不必担心文件名中的不安全字符。
https://stackoverflow.com/questions/38646743
复制相似问题