find 和 ls 错误

find 和 ls 错误

我尝试使用 find 和 ls 根据日期对文件进行排序,但是它没有任何作用。这是我的命令:

find ./.BUBackups -name "test*" -exec ls -t {} \;

我也尝试过:

find ./.BUBackups -name "test*" -exec ls -lt {} \;

在测试中,-t 根本不起作用。-l 可以工作,但如果我输入 -t,它就像我根本没有输入一样。然而,当我没有通过 exec 运行它时,ls -t 或 ls -lt 工作得很好,换句话说,只需输入 ls -t 就可以了

这是一个故障吗?还是我做错了什么?

答案1

find 的参数-exec对 find 找到的每个文件执行一次指定的命令。因此,如果您有文件 test_a、test_b 和 test_c,您的命令将相当于:

ls -lt test_a
ls -lt test_b
ls -lt test_c

换句话说,每个列表都是根据文件独立执行的,因此文件将按照 find 找到的顺序列出,而不是按照修改时间的顺序,就像-tls 选项指定的一样。

您真正想要的是类似的东西find ./.BUBackups -name 'test*' | xargs ls -lt,对于我上面使用的示例文件,它相当于ls -lt test_a test_b test_c。由于您现在使用一次 ls 调用来列出您感兴趣的所有文件,因此它可以将它们按正确的修改时间顺序排列。

答案2

-t不起作用的原因是它对每个找到的文件分别find执行ls一次,因此输出是按照找到文件的顺序进行的。要使其按您期望的方式工作:

find ./.BUBackups -name "test*" -exec ls -lt {} +

或者

find ./.BUBackups -name "test*" -print0 | xargs -0 -exec ls -lt 

相关内容