使用命令返回来创建xargs符号链接

时间:2014-07-28 17:29:39

标签: linux bash shell xargs

我尝试在上一个命令中返回一个带有名称的符号链接文件,但返回错误is not a directory

我希望使用hash.0创建符号链接文件的文件夹中的每个文件,以下代码段位于示例文件213123.0中:

for x in *; do openssl x509 -noout -hash -in $x|xargs ln -s $x {} ;  done;

返回:

"ln: target ‘b28afb7c’ is not a directory"

我该如何正确地做到这一点?

2 个答案:

答案 0 :(得分:3)

xargs不是find。你不需要{}告诉xargs在哪里坚持参数,它总是把它粘在最后。删除{}参数,您的命令将起作用。

使用xargs -t参数让它显示它试图运行的命令会找到你。

还应该指出,openssl(至少在某些版本中)有一个c_rehash perl脚本,它可以为您执行此操作并处理天真尝试不会发生的极端情况(例如重复的证书文件和重复的哈希结果)。此外,您的代码段实际上并未附加您所说的.0

您无法使用xargs在此处执行操作,因为您无法控制放置/等。 xargs的参数,例如创建您想要的hash.0文件名。这就是说xargs在这里是完全没必要的,因为你只需要一点输出来处理。

使用hash=$(openssl ... "$x"); ln -s "$x" "${hash}.0"或完全删除变量并使用ln -s "$x" "$(openssl ... "$x")"

答案 1 :(得分:0)

如果你安装了GNU Parallel:

parallel 'ln -s {} $(openssl x509 -noout -hash -in {}).0' ::: *

如果没有为您的系统打包,则应在10秒内安装:

(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash

要了解更多信息:观看介绍视频,以便快速了解: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

完成教程(man parallel_tutorial)。你命令行 会爱你的。