Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.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_Find - Fatal编程技术网

BASH:排除“中的目录”;查找“;命令

BASH:排除“中的目录”;查找“;命令,bash,find,Bash,Find,我想使用find命令排除目录 我有这个: GLUE="$GLUE -not -iwholename */dir3/*" 我想在find命令(find$GLUE[…])中使用GLUE变量。不幸的是,我得到的不是-not-iwholename*/dir3/*而是-not-iwholename dir3/file1 dir3/file2 dir3/file3,也就是说,*/dir3/*变成了满足此条件的文件名。当然,find也因此不起作用。如何阻止这种情况 find./-iname-在南 find

我想使用find命令排除目录

我有这个:

GLUE="$GLUE -not -iwholename */dir3/*"
我想在
find
命令(
find$GLUE[…])中使用
GLUE
变量。不幸的是,我得到的不是
-not-iwholename*/dir3/*
而是
-not-iwholename dir3/file1 dir3/file2 dir3/file3
,也就是说,
*/dir3/*
变成了满足此条件的文件名。当然,
find
也因此不起作用。如何阻止这种情况

find./-iname-在南
find ./ -iname ! -iname <dirname of file name to be not part of search results>

find ./ -iname <file name> ! -path "./dirt o be Excluded/*" 
找到。/-在南-路径“/应排除污垢/*”
我希望有人能帮我找到。/-iname-在南 找到。/-在南-路径“/应排除污垢/*”

我希望有人能帮上忙让我先回答这个问题:

如何使用
find
递归搜索,同时从搜索中排除目录?我的
find
命令支持
-prune
操作和公共扩展(例如,由GNU
find
提供)

非常幸运的是,您的
find
支持
-prune
操作。恭喜你

在这种情况下,仅添加:

\! \( -name 'dir_to_exclude' -prune \)
如果
find
处理的当前名称为
dir\u to\u exclude
,同时从搜索树1中删除(即剪切该分支),则此选项为假

让我们试试(在一个临时目录中):

看起来不错


现在,您不应该将
find
(或者更一般地说,您的命令和参数)的参数放在变量中,而应该放在数组中!如果不这样做,很快就会遇到包含空格或通配符的参数的问题

glue
内容放入数组:例如,要查找名称中有
1
且为空的所有文件2:

然后,一个数组将排除此目录:

$ mkdir {a,b,c,d}/{,1,2,3}
$ touch {a,b,c,d}/{,1,2,3}/{file1,file2}
$ tree
.
|-- a
|   |-- 1
|   |   |-- file1
|   |   `-- file2
|   |-- 2
|   |   |-- file1
|   |   `-- file2
|   |-- file1
|   `-- file2
|-- b
|   |-- 1
|   |   |-- file1
|   |   `-- file2
|   |-- 2
|   |   |-- file1
|   |   `-- file2
|   |-- file1
|   `-- file2
`-- c
    |-- 1
    |   |-- file1
    |   `-- file2
    |-- 2
    |   |-- file1
    |   `-- file2
    |-- file1
    `-- file2

9 directories, 18 files
$ find \! \( -name a -prune \)
.
./b
./b/file2
./b/1
./b/1/file2
./b/1/file1
./b/file1
./b/2
./b/2/file2
./b/2/file1
./c
./c/file2
./c/1
./c/1/file2
./c/1/file1
./c/file1
./c/2
./c/2/file2
./c/2/file1
然后查找名称中包含
1
且为空的所有文件,同时排除目录
a
(与前面相同的临时目录中):

看起来真不错!(并遵守引文!)


一, 如果您确实想确保只排除名为
dir\u to\u exclude
的目录,如果您有一个名为
dir\u to\u exclude
的文件,您可以这样指定它:

\! \( -name 'dir_to_exclude' -type d -prune \)
二,
我在这里引用了很多名言。这只是一个好习惯,它实际上为通配符部分
*1*
和括号节省了我的时间

让我先回答这个问题:

如何使用
find
递归搜索,同时从搜索中排除目录?我的
find
命令支持
-prune
操作和公共扩展(例如,由GNU
find
提供)

非常幸运的是,您的
find
支持
-prune
操作。恭喜你

在这种情况下,仅添加:

\! \( -name 'dir_to_exclude' -prune \)
如果
find
处理的当前名称为
dir\u to\u exclude
,同时从搜索树1中删除(即剪切该分支),则此选项为假

让我们试试(在一个临时目录中):

看起来不错


现在,您不应该将
find
(或者更一般地说,您的命令和参数)的参数放在变量中,而应该放在数组中!如果不这样做,很快就会遇到包含空格或通配符的参数的问题

glue
内容放入数组:例如,要查找名称中有
1
且为空的所有文件2:

然后,一个数组将排除此目录:

$ mkdir {a,b,c,d}/{,1,2,3}
$ touch {a,b,c,d}/{,1,2,3}/{file1,file2}
$ tree
.
|-- a
|   |-- 1
|   |   |-- file1
|   |   `-- file2
|   |-- 2
|   |   |-- file1
|   |   `-- file2
|   |-- file1
|   `-- file2
|-- b
|   |-- 1
|   |   |-- file1
|   |   `-- file2
|   |-- 2
|   |   |-- file1
|   |   `-- file2
|   |-- file1
|   `-- file2
`-- c
    |-- 1
    |   |-- file1
    |   `-- file2
    |-- 2
    |   |-- file1
    |   `-- file2
    |-- file1
    `-- file2

9 directories, 18 files
$ find \! \( -name a -prune \)
.
./b
./b/file2
./b/1
./b/1/file2
./b/1/file1
./b/file1
./b/2
./b/2/file2
./b/2/file1
./c
./c/file2
./c/1
./c/1/file2
./c/1/file1
./c/file1
./c/2
./c/2/file2
./c/2/file1
然后查找名称中包含
1
且为空的所有文件,同时排除目录
a
(与前面相同的临时目录中):

看起来真不错!(并遵守引文!)


一, 如果您确实想确保只排除名为
dir\u to\u exclude
的目录,如果您有一个名为
dir\u to\u exclude
的文件,您可以这样指定它:

\! \( -name 'dir_to_exclude' -type d -prune \)
二,
我在这里引用了很多名言。这只是一个好习惯,它实际上为通配符部分
*1*
和括号节省了我的时间

在星号周围加单引号:
'*/dir3/*'
在星号周围加单引号:
'*/dir3/*'