如何让“查找”不返回当前目录

如何让“查找”不返回当前目录

我目前正在尝试find(并复制)指定目录中符合特定模式的所有文件和文件夹结构,并且我快完成了!

具体来说,我想从指定路径递归复制所有不以“_”字符开头的文件夹。

find /source/path/with/directories -maxdepth 1 -type d ! -name _\* -exec cp -R {} /destination/path \;

/source/path/with/directories/ 路径中包含以 '_' 开头的机器特定目录和其他目录,而我只想复制其他目录。出于某种我无法理解的原因,find 命令返回 /source/path/with/directories/ 目录,因此复制其内容,包括以 '_' 开头的目录。

有谁能解释一下这是为什么吗?

谢谢,

帕斯卡

答案1

find返回根路径,因为它符合您的标准 - 即它是一个目录,并且它不以 开头_

我怀疑您正在寻找-mindepth 1

$ cd /tmp
$ mkdir a
$ touch a/b
$ mkdir a/c
$ touch a/c/d
$ find a
a
a/b
a/c
a/c/d
$ find a -mindepth 1
a/b
a/c
a/c/d

参考:查找手册页

答案2

更改自:

find /source/path/with/directories ...

到:

(shopt -s dotglob; find /source/path/with/directories/* ... )

那样的话/source/path/with/directories就不会被包括在内。

这样也将会匹配以(隐藏文件、目录)开头的文件和目录shopt -s dotglob*.

并且整个东西被包裹在一个子 shell 中,以(...)限制 的效果shopt仅在子 shell 内,否则您必须稍后使用 撤消它shopt -u dotglob

相关内容