我目前正在尝试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
。