我尝试在上一个命令中返回一个带有名称的符号链接文件,但返回错误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"
我该如何正确地做到这一点?
答案 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)。你命令行 会爱你的。