find 命令有时会导致压缩不匹配的文件

find 命令有时会导致压缩不匹配的文件

我正在尝试制作一个包含在过去 x 分钟内修改的特定目录中的所有文件的 zip 文件。

这是我的命令:

find "/path/to/dir" -mmin -30 -not -name ".*" -exec zip -r "testfile.zip" "{}" \+

如果我将修改时间设置得足够小,那么它就会正确识别我最近更改的一个文件。

问题是...如果我将最短修改时间增加到,比如说 50(它不断变化),那么 zip 文件会添加全部/path/to/dir 中的文件的数量。即使所有文件都已确实没有改变。

因此,不知何故,有一个特定的文件导致整个 find 命令崩溃。我查看了所有最近修改的文件(在最后一天内)以查找其中包含空格或其他内容的文件,但我没有找到任何文件。这应该不重要,因为我引用了大括号,对吧?

还有什么可能导致这种奇怪的行为?

答案1

默认情况下,find在搜索中包含所有内容:目录、文件和符号链接。

find "/path/to/dir" -mmin -30 -not -name ".*" -exec zip -r "testfile.zip" "{}" \+

如果/path/to/dir在过去 30 分钟内进行了修改,它将通过所有测试,并且zip由于已给出该-r选项,因此会将目录及其下的所有内容添加到存档中。

您可以通过多种方式解决此问题,使用以下任一(或两者):

  • 不给zip选项-r。您只对最近修改的文件感兴趣,而不是对最近修改的目录中的每个文件感兴趣。
  • 将测试添加-not -type d到表达式中find,以便它不匹配目录。
find "/path/to/dir" -not -type d -mmin -30 -not -name ".*" -exec zip "testfile.zip" "{}" \+

相关内容