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


11

我目前正在尝试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 /目录,并因此复制其内容,包括以“ _”开头的目录。

有人暗示为什么会这样吗?

谢谢,

帕斯卡


Answers:


14

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

参考:查找手册页


优秀的!如我所愿。我通过添加使它起作用!名称“文件”,但对我来说感觉不对…
Pinpin 2012年

0

更改自:

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

至:

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

这样/source/path/with/directories就不会包括在内。

shopt -s dotglob是,这样*也将匹配的文件和目录具有启动.(隐藏文件,目录)。

并将整个内容包装在子外壳中,(...)以限制shopt仅在该子外壳中的效果,否则,您稍后必须使用撤消该操作shopt -u dotglob


对于以开头的目录条目,它将失败.。也不要尝试.*,否则您会与其他很多您从未打算过的东西相提并论。;-)
zigg 2012年

好点,更新了答案,使用添加了shopt
janos
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.