linux - 为什么 find 的 -exec 选项包含“不匹配”项目?
问题描述
我正在尝试使用 find 来查找和排除/过滤一些目录,以免被复制到另一个备份目录。我尝试使用 find 的 '-exec' 选项这样做最终会复制每个已处理的文件而不是仅复制匹配项,因此我对预期的行为应该是什么感到非常困惑,并且希望能帮助获得更好的理解。
初始点:
me@computer>ls
AddMonitorsOnEntry MantisCoreFormatting MantisGraph PastePicture XmlImportExport
确保 find 按预期排除了不需要的“文件”
me@computer>find . -maxdepth 1 -not -regex '.*MantisCoreFormatting\|.*MantisGraph\|.*XmlImportExport'
.
./AddMonitorsOnEntry
./PastePicture
现在将这两个目录复制到备份目录:
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”对于这里的海报来说似乎足够好https://unix.stackexchange.com/questions/50612/how-to-combine-2-name-conditions -in-find/50633。我正在寻求帮助以了解如何使用“-exec”而不是使用 xargs 或其他东西。谢谢。
解决方案
现在将这两个目录复制到备份目录
你没有 2 场比赛。您的命令显示 3:
.
./AddMonitorsOnEntry
./PastePicture
.
是当前目录,因此您的cp
命令会复制所有内容。
而不是find .
您可以使用find *
跳过当前目录.
,但仍处理其中的所有(非隐藏)文件/目录。
推荐阅读
- android - 当 Activity 处于前台时,如何在不继续调用 onResume 的情况下正确启动 Activity?
- python-3.x - Python matplotlib 根据来自较大数据集的值缩放 y
- ios - 使用 TrustKit iOS 在 react-native 应用程序中实现 ssl pinning
- git - 只忽略远程仓库中的文件?
- python - PyQt5 OpenGL Cubemap - 黑色窗口显示
- c++ - 使用类内的自定义排序编译错误
- python - 将目录从 Jupyter Lab 导出到单元格
- django - 在 django 中计算两个整数字段
- azure - Azure Cloud Shell 对于 $keyVault = Get-AzKeyVault -VaultName $keyVaultName -ResourceGroupName $rgName 命令始终返回 Null
- python - 如何在 python pandas 中标记循环数的值