【发布时间】:2020-01-28 21:26:21
【问题描述】:
我正在尝试使用 find 来查找和排除/过滤一些目录,以免被复制到另一个备份目录。 我尝试使用 find 的 '-exec' 选项这样做最终会复制每个已处理的文件,而不是仅复制匹配项,所以我对预期的行为应该是什么感到很困惑,希望能帮助获得更好的理解。
起点:
me@computer>ls
AddMonitorsOnEntry MantisCoreFormatting MantisGraph PastePicture XmlImportExport
确保 find 按预期排除不需要的“文件”
me@computer>find . -maxdepth 1 -not -regex '.*MantisCoreFormatting\|.*MantisGraph\|.*XmlImportExport'
.
./AddMonitorsOnEntry
./PastePicture
现在将那些 2 目录复制到备份目录:
me@computer>find . -maxdepth 1 -not -regex '.*MantisCoreFormatting\|.*MantisGraph\|.*XmlImportExport' -exec cp -dr '{}' ~/backup \;
现在看看它是否有效......
me@computer>cd ~/backup
me@computer>ls
AddMonitorsOnEntry backup MantisCoreFormatting MantisGraph PastePicture XmlImportExport
WTH?? 我认为'-exec'只对匹配项进行操作,根据手册页中的这个sn-p:“......指定的命令对每个匹配的文件运行一次......”
我知道还有其他方法可以完成这项任务,但对于https://unix.stackexchange.com/questions/50612/how-to-combine-2-name-conditions-in-find/50633 的海报来说,'-exec' 似乎工作得很好。我正在寻求帮助以了解如何使用“-exec”而不是使用 xargs 或其他东西。谢谢。
【问题讨论】:
-
Stack Overflow 用于编程问题,而不是关于使用或配置 Unix 及其实用程序的问题。 Unix & Linux 或 Super User 将是解决此类问题的更好地方。