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 为什么可以';我不能使用find排除目录吗_Bash_Gnu Findutils - Fatal编程技术网

Bash 为什么可以';我不能使用find排除目录吗

Bash 为什么可以';我不能使用find排除目录吗,bash,gnu-findutils,Bash,Gnu Findutils,我试图使用find和-exec在目录中的所有子目录上运行命令,但是在其中一个目录上,脚本运行所依据的用户没有足够的权限,我收到一个错误(权限被拒绝)。我试图使用忽略目录-路径或使用-prune。这两种方法都不起作用。我已经尝试了下面的两个命令 我尝试了子区域排除的每一种组合,开始时有/,结束时有/*。我尝试了相对路径、完整路径以及所有这些路径的每一个组合,您可以想到它们来尝试匹配这条路径,但它根本不起作用。手册页没有任何帮助,本论坛上任何相关问题的建议都不会产生任何有用的结果。为什么手册页中建议

我试图使用
find
-exec
在目录中的所有子目录上运行命令,但是在其中一个目录上,脚本运行所依据的用户没有足够的权限,我收到一个错误(权限被拒绝)。我试图使用
忽略目录-路径
或使用
-prune
。这两种方法都不起作用。我已经尝试了下面的两个命令

我尝试了
子区域排除
的每一种组合,开始时有
/
,结束时有
/*
。我尝试了相对路径、完整路径以及所有这些路径的每一个组合,您可以想到它们来尝试匹配这条路径,但它根本不起作用。手册页没有任何帮助,本论坛上任何相关问题的建议都不会产生任何有用的结果。为什么手册页中建议的方法都不起作用?究竟如何做到这一点

find /path/to/dir -maxdepth 1 -type d ! -path "subDirToExclude" -exec somecommand {} +

-path
选项的参数应该是完整的路径名,而不仅仅是目录名。如果只想匹配目录的名称,请使用
-name

find /path/to/dir -maxdepth 1 -type d ! -name "subDirToExclude" -exec somecommand {} +
您也可以不使用
find
执行此操作,因为
-maxdepth 1
不会递归到子目录中

shopt -s extglob
somecommand /path/to/dir /path/to/dir/!(subDirToExclude)/

/
放在文件名的末尾,使通配符只与目录匹配。实际上,这也将匹配到目录的符号链接;如果这是一个问题,您不能使用此解决方案。

-name“subdertoexclude”-prune-o
也会起作用。从
手册路径
:请注意,模式匹配测试适用于整个文件名,从命令行上命名的一个起始点开始。只有在相关起点也是绝对路径的情况下,在此处使用绝对路径名才有意义。这意味着此命令将永远不会匹配任何内容:
find bar-path/foo/bar/myfile-print
“顺便说一句,我建议您将逻辑分解成更小的部分来测试您的逻辑。如果
find/path/to/dir-path“subdertoexclude”-print
没有打印任何内容,那么您就知道
-path”subdertoexclude“
也找不到任何要排除它的内容。我已经尝试了find/path/to/dir-maxdepth 1-type d-path“/path/to/dir/subdertoexclude”-exec somecommand{}+以及find/path/to/dir-maxdepth 1-type d-path”/path/to/dir/subdertoexclude”-prune-o-exec somecommand{}+这两个命令都不起作用。我已经尝试了我能想到的每一种组合。你能告诉我你将如何执行这个命令吗?我也尝试过find/path/to/dir-maxdepth 1-typed-命名为“subDirToExclude”-执行上面的somecommand{}+,但它不起作用。为什么我仍然会在该目录上获得被拒绝的权限?您是从
find
还是从
somecommand
获得错误?如果使用
echo
作为命令,是否在输出中看到目录名?我已从排除的目录中删除了所有权限,没有收到任何错误。
find /path/to/dir -maxdepth 1 -type d ! -name "subDirToExclude" -exec somecommand {} +
shopt -s extglob
somecommand /path/to/dir /path/to/dir/!(subDirToExclude)/