BASH:排除“中的目录”;查找“;命令
我想使用find命令排除目录 我有这个: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
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
操作和公共扩展(例如,由GNUfind
提供)
非常幸运的是,您的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
操作和公共扩展(例如,由GNUfind
提供)
非常幸运的是,您的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/*'