我尝试使用 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 找到的顺序列出,而不是按照修改时间的顺序,就像-t
ls 选项指定的一样。
您真正想要的是类似的东西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