Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash:查找不存在给定文件的任何子目录_Bash_Shell_Subdirectory - Fatal编程技术网

Bash:查找不存在给定文件的任何子目录

Bash:查找不存在给定文件的任何子目录,bash,shell,subdirectory,Bash,Shell,Subdirectory,我想知道我的文件是否存在于下面的任何子目录中。在我的shell脚本中,子目录是在上面的步骤中创建的,下面的代码总是告诉我该文件不存在(即使存在),并且我希望也打印路径 #!/bin/bash .... if ! [[ -e [ **/**/somefile.txt && -s **/**/somefile.txt ]]; then echo "===> Warn: somefile.txt was not created in the following path

我想知道我的文件是否存在于下面的任何子目录中。在我的shell脚本中,子目录是在上面的步骤中创建的,下面的代码总是告诉我该文件不存在(即使存在),并且我希望也打印路径

#!/bin/bash
....

if ! [[ -e [ **/**/somefile.txt && -s **/**/somefile.txt ]]; then
    echo "===> Warn: somefile.txt was not created in the following path: " 
    # I want to be able to print the path in which file is not generated
    exit 1
fi

我知道文件名是somefile.txt,它将在所有子目录中创建,但子目录名变化很大。。因此,globbing.

首先--
***/somefile.txt
仅扩展到实际存在的
somefile.txt
副本。如果您想找到不存在的,这意味着您需要遍历目录,并且不能在glob表达式中包含
somefile.txt
。其次,您不能将glob表达式作为参数传递给
-e
-s
;这些测试表达式采用精确的路径名作为参数,或采用单个文件名。它们不接受glob或多个文件的列表(glob在某些上下文中可以扩展到这些文件)。第三,您需要运行
shopt-s extglob
,以使
**
具有任何特殊意义。(如果您习惯于在交互式shell中开箱即用,那么您的一个点文件可能正在为您运行它)。首先--
**/somefile.txt
仅扩展到实际存在的
somefile.txt
副本。如果您想找到不存在的,这意味着您需要遍历目录,并且不能在glob表达式中包含
somefile.txt
。其次,您不能将glob表达式作为参数传递给
-e
-s
;这些测试表达式采用精确的路径名作为参数,或采用单个文件名。它们不接受glob或多个文件的列表(glob在某些上下文中可以扩展到这些文件)。第三,您需要运行
shopt-s extglob
,以使
**
具有任何特殊意义。(如果您习惯于在交互式shell中开箱即用,那么您的一个dotfiles可能正在为您运行它)。这太完美了!非常感谢查尔斯。我真希望有一些关于这方面的文档,但这正是我想要的。对于模式匹配(globbing)文档来说,这可能是一个很好的起点。深入讨论了
test
[
[[
,这也是一个很好的参考。是否有其他内容可以帮助我找到文档?常见问题解答路径(已在书签中)语法模式链接对我帮助很大。我想我不需要更多的东西。再次感谢!这太完美了!非常感谢Charles。我真希望有一些关于这方面的文档,但这正是我想要的。这可能是关于模式匹配(globbing)的文档的一个很好的起点。讨论
测试
[
[[
在某些深度上,也是一个很好的参考。还有其他内容可以帮助我找到文档吗?常见问题解答路径(已经在书签中)和语法模式链接对我帮助很大。我想我不想为我正在做的事情多做一些。再次感谢!
#!/bin/bash

shopt -s extglob   ## enable **, which by default has no special behavior

for d in **/; do
  if ! [[ -s "$d/somefile.txt" ]]; then
    echo "===> WARN: somefile.txt was not created (or is empty) in $d" >&2
    exit 1
  fi
done