【问题标题】:Having trouble with parentheses in unix find and correct syntax在 unix find 和正确的语法中遇到括号问题
【发布时间】:2014-11-12 06:12:22
【问题描述】:

这一行有效,目标:

  • 搜索目录
  • 查找所有比timestamp 文件更新的文件
  • 未命名为 .DS_Store
  • 否则,列出所有其他文件。

我想出了这个,它有效,但我看到网上的例子使用了很多括号,而我没有使用。我在想可能有更好的方法:

find /Users/$USER/Library/Messages/Attachments -not -name ".DS_Store" -not -name "timestamp" -name "*" -type f -newer /Users/$USER/Library/Messages/scripts/timestamp

最终我想获取结果并将它们复制到特定位置。为此,我将附加以下内容:

-exec cp {} archive_files/ \;

【问题讨论】:

  • 添加-exec...有什么问题?

标签: bash find


【解决方案1】:

可以通过应用de Morgan's Law 将所有-not 表达式组合成一个带括号的组:

-not \( -name .DS_Store -o -name timestamp \)

我看不出你的简单案例的意义,但如果你有很多名字要排除,它可能会更清楚。

【讨论】:

  • 另一方面,使用-regex 而不是-name 可以让你使它更加紧凑。
  • 快速提问,如果我不希望在cp 上覆盖名称,我将如何附加序列号,我可以创建一个计数器,但是值,我如何附加它find 命令中的文件扩展名就在 -exec cp 发生的地方? - 谢谢
猜你喜欢
  • 2015-12-31
  • 2013-07-07
  • 1970-01-01
  • 1970-01-01
  • 2021-10-26
  • 2020-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多