如何递归地获取子目录的时间戳

时间:2016-09-21 05:24:44

标签: bash shell unix

我想以递归方式获取子目录的时间戳并写入新文件。下面是我写的示例脚本。但这并不是递归发生的。

version()5.7.13-0ubuntu0.16.04.2

1 个答案:

答案 0 :(得分:2)

问题是ls忽略了标准输入。相反,尝试:

find /bishare/DLSFTP/$Year* -type d -exec ls -dlrt {} +

讨论

举个例子,让我们运行ls -d,不带参数,也不运行stdin:

$ ls -d
.

现在,让我们在stdin:

上提供目录A的名称
$ echo A | ls -d
.

如您所见,ls忽略了标准输入。现在,让我们在命令行中提供名称A

$ ls -d A
A

这成功了。 ls返回目录A的名称。

find命令中,-exec ls -lrt {} +告诉findls -lrt之后的命令行中找到它找到的目录名称,然后执行ls 。这就是你需要的。

另请注意,ls -lrt将报告目录中的文件。要仅显示有关目录的信息,请使用-dls -dlrt

备选方案1

如果您系统上的find支持-printf,那么我们可以取消使用ls并获取输出的自定义格式(小贴士:tripleee) 。例如:

find .  -type d -printf '%t %p\n'

%t打印时间戳,%p打印目录名称。 GNU find支持此功能。

备选方案2

虽然缺少lsfind -printf的格式灵活性,但还有另一种选择:find-ls动作:

find .  -type d -ls

这也可能需要GNU find