从bash路径数组中提取缺少的路径

分享于 

2分钟阅读

互联网

 

问题:

我有一个路径数组:


paths=(


 /foo/exists1


 /foo/exists2


 /foo/missing1


)



要找到缺少的那些:


ls"${paths[@]}" 1>/dev/null



显示:

ls : cannot access'/foo/missing1': no such file or directory

现在想清理一下:


ls"${paths[@]}" 1>/dev/null | sed 's/ls: cannot access //' | sed 's/: No such file or directory//''



但是我得到:

ls : cannot access'/foo/missing1': no such file or directory /foo/exists1/foo/exists2


答案1:

问题显而易见,错误转到文件描述符2,而不是stdout。

必须将2重定向到1,然后grep:


 paths=(


 /foo/exists1


 /foo/exists2


 /foo/missing1


 )


 ls"${paths[@]}" 2>&1 


 | grep 'No such file' 


 | sed 's/ls: cannot access '''//' 


 | sed 's/''': No such file or directory//'




答案2:

我建议循环遍历数组并构建一个新的,临时的并可读的路径数组,然后通过以下方式传输它们:


for p in"${paths[@]}"


do


 [ -r"$p" ] && newpaths+=("$p")


done


paths=("${newpaths[@]}" )





ext  Extra  提取  BASH  路径  ARR  
相关文章