查找命令:多个条件

Pie*_*rre 9 find filenames

作为文件/目录命名的标准,我使用诸如将日期和标签字符串放入由下划线分隔的文件名中的方法,例如:

2015_03_10_usa_nyc_vacations_album_pictures
Run Code Online (Sandbox Code Playgroud)

很长一段时间以来,我一直使用 Recoll 之类的软件,但通常它提供的记录比我需要的要多得多。由于我的命名非常一致,我认为应该有一种方法可以使用 find 命令对其进行脚本化。

虽然我知道如何对单个条件执行查找搜索,但我不确定如何找到多个条件/条件。也就是说,我如何找到名称满足某些条件的所有文件。让我们考虑以下包含

  1. {2015} AND { {album} OR {picture} }
  2. {专辑} AND {vacations} AND NOT {2015}

Arc*_*mar 9

第一个

 find DIR \( -name 2015\* -a \( -name \*album\* -o -name \*picture\* \) \) -delete
Run Code Online (Sandbox Code Playgroud)

在哪里

  • 你必须逃离*以避免扩张
  • 你必须逃避(和)来避免子shell
  • 替换-delete成你喜欢的任何东西

第二个留作作业(提示\!


gen*_*a2x 7

输入以下内容通常是不值得的

find /dir -regex '.*2015.*\(album.*\|picture.*\)'

不要浪费你的时间,使用 grep 和“每个任务一个工具”的 UNIX 概念:

find /dir | egrep '2015.*(album|picture)'

好处:

  • 少打字,更快获得结果
  • 更具可读性(没有\,不必要的.*)
  • 可能运行得更快——管道命令允许内核在两个 CPU 之间平衡,是的,我现在在我的普通控制台中测试过)
  • 如果您想从文件列表或其他来源中读取,则行为类似


cha*_*aos 5

对于第一个find来说-regex会很好:

find /dir -regex '.*2015.*\(album.*\|picture.*\)'
Run Code Online (Sandbox Code Playgroud)

对于第二个:

find . -name "*album*" -a -name "*vacations*" -a -not -name "*2015*"
Run Code Online (Sandbox Code Playgroud)

  • 以防万一有人不知道含义,-a 代表 AND(同样,-o 代表 OR)。来源:http://man7.org/linux/man-pages/man1/find.1.html (3认同)