Linux 为什么要找到';s-exec选项包括';非匹配';项目?
我正在尝试使用find来查找和排除/过滤少数目录,使其不被复制到另一个备份目录。 我尝试使用find的'-exec'选项复制每个已处理的文件,而不是只复制匹配的文件,因此我对预期的行为应该是什么感到非常困惑,希望能够帮助更好地理解 起点:Linux 为什么要找到';s-exec选项包括';非匹配';项目?,linux,bash,grep,find,Linux,Bash,Grep,Find,我正在尝试使用find来查找和排除/过滤少数目录,使其不被复制到另一个备份目录。 我尝试使用find的'-exec'选项复制每个已处理的文件,而不是只复制匹配的文件,因此我对预期的行为应该是什么感到非常困惑,希望能够帮助更好地理解 起点: me@computer>ls AddMonitorsOnEntry MantisCoreFormatting MantisGraph PastePicture XmlImportExport 确保“查找”按预期排除不需要的“文件” me@com
me@computer>ls
AddMonitorsOnEntry MantisCoreFormatting MantisGraph PastePicture XmlImportExport
确保“查找”按预期排除不需要的“文件”
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
什么??
我认为'-exec'只对匹配项进行操作,根据手册页中的这段代码:“…指定的命令对每个匹配的文件运行一次…”
我知道还有其他方法可以完成这项任务,但是“-exec”对于这里的海报来说似乎已经足够好了。我正在寻找帮助,了解如何使用“-exec”而不是使用xargs或其他东西。谢谢
现在将这两个目录复制到备份目录
你没有2根火柴。您的命令显示3:
/AddMonitorsOnEntry
/PastePicture
是当前目录,因此您的cp
命令会复制所有内容
您可以使用find*
跳过当前目录
,而不是find.
,但仍然可以处理其中的所有(非隐藏)文件/目录。我真傻
因此,我的初始查找表达式包含当前目录,因此当前目录中的任何文件都将由“-exec”操作
为了修复,我在排除的目录中添加了当前目录
me@computer>find . -maxdepth 1 -not -regex '.*MantisCoreFormatting\|.*MantisGraph\|.*XmlImportExport\|\.'
./AddMonitorsOnEntry
./PastePicture
用于编程问题,而不是有关使用或配置Unix及其实用程序的问题。或者更适合问这样的问题。嗯…'今天很晚了,哈哈。感谢您的澄清和提示!从
cp-dr
中删除-r
也可能有帮助,或者将-type f
添加到查找
条件中。