Bash脚本find命令执行报错及目录过滤失效求助
问题解决方案
一、解决脚本执行报错(No such file or directory)
你的脚本中执行cmdOutput=$("${sshCommand}")的方式错误,bash会把整个sshCommand字符串当作单个命令文件名去查找,而不是解析成find命令加参数,这就是错误码127(命令未找到)的原因。
修复方法
将执行命令的方式改为用bash -c来解析命令字符串:
cmdOutput=$(bash -c "${sshCommand}")
如果后续要通过ssh执行,直接用ssh传递命令字符串即可:
cmdOutput=$(ssh ${SSHOPTIONS} ${SSHUSERHOST} "${sshCommand}")
二、解决find命令逻辑错误(无返回结果)
你原来的find命令逻辑矛盾:! -path /home/user/inbox -a ! -path '/home/user/inbox/*'会排除所有inbox目录下的内容(因为所有子项的路径都匹配/home/user/inbox/*),同时又排除imaging目录及其子项,最终没有任何内容符合条件。
正确的find命令
根据你的需求(排除/home/user/inbox本身、/home/user/inbox/imaging本身、/home/user/inbox/imaging/validFile,其余内容全部列出),正确的命令如下:
find -L /home/user/inbox \ ! -path /home/user/inbox \ ! -path /home/user/inbox/imaging \ ! -path /home/user/inbox/imaging/validFile \ -ls
脚本中构造命令的修正
修改printf语句,去掉多余的排除条件:
printf -v sshCommand "find -L %s ! -path %s ! -path %s ! -path %s/validFile -ls" \ "${inbox}" "${inbox}" "${VENDOR['FTPSOURCEDIR']}" "${VENDOR['FTPSOURCEDIR']}"
验证结果
执行修正后的命令,会列出以下内容:
/home/user/inbox/invalidDir1及其所有子项/home/user/inbox/invalidDir2及其所有子项/home/user/inbox/invalidFile/home/user/inbox/imaging/invalidFile/home/user/inbox/imaging/invalidImagingDir1及其所有子项
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

