我正在尝试制作一个包含在过去 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" "{}" \+