首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用适当的时间风格"find -ls“

用适当的时间风格"find -ls“
EN

Stack Overflow用户
提问于 2014-01-07 23:53:31
回答 2查看 15.2K关注 0票数 8

我使用下面的命令来生成一个文件列表,我有时会比较这个列表,看看是否有什么变化:

代码语言:javascript
复制
find /directory -xdev -ls

我的问题是输出中的时间并不总是采用相同的格式:

代码语言:javascript
复制
Sep 19 08:48 ./pool/f/f/0/ff046cc5b7188073cbd68207c52bddc5
Nov  2 06:24 ./pool/f/f/0/ff0e803c36d89315a6b3663ed1295f71
Jan 18  2012 ./pool/f/f/0/ff07f60465d8deb7a1aa38096d0b798d
Jan 18  2012 ./pool/f/f/0/ff07436f519bddf1d340afde5a240375

对于ls-命令,可以使用-- time-format =long-iso选项强制所有文件使用相同的时间格式。是否可以将其与find-command结合使用?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-08 00:49:26

我的手册页中没有任何关于更改-ls参数格式的内容。实际上,在我的系统上,影响ls命令本身输出的各种环境变量不会影响-ls的输出。我假设-ls参数的格式是find内部的,并且不涉及实际的ls命令。对我来说,这是有意义的编程。为什么要运行外部命令?只需模拟显示即可。

我能想到的唯一解决方法是使用-exec-print0将结果传递给实际的ls命令。一点警告:如果您传递目录的名称,ls将打印该目录的内容,因此您需要将-d传递给ls命令或将-type f添加到find查询中。我在Linux上查看了find的手册页,发现它应该与我的find查询的-dils, so I used that. Since-dis included, I didn't have to add类型-f`相同:

这是在使用-exec,它会将每个文件或目录单独发送到ls命令。如果您有10,000个文件,则ls将被调用10,000次。

代码语言:javascript
复制
$ find /directory -xdev -exec ls -dils --time-style=long-iso {} \;

这可能更有效:

代码语言:javascript
复制
$ find /directory -xdev -print0 | xargs -0 ls -dils --time-style=long-iso

这将对适合命令缓冲区的尽可能多的文件名进行分组,并立即将它们传递给ls命令。它将根据需要多次调用ls命令来完成所有文件。例如,如果您的find命令中有10,000个文件,则ls命令可能会被调用一次或两次,而不是10,000次。

问题是xargs在有趣的文件名方面存在问题,并且正如手册中指出的那样,存在一些安全问题:

要安全地使用xargs是不可能的,因为在生成输入文件列表和在xargs发出的命令中使用它们之间总是有一段时间间隔。如果其他用户有权访问系统,他们可以在此时间窗口内操作文件系统,强制xargs运行的命令的操作应用于您不想要的文件。有关此问题和相关问题的更详细讨论,请参阅findutils Texinfo文档中的“安全注意事项”一章。find的-execdir选项通常可以用作更安全的替代选项。

-print0参数使用NUL字符而不是NL来分隔文件名,-0参数告诉xargs使用NUL字符而不是空格( $IFS环境变量中的字符)作为文件名分隔符。

这意味着几乎所有时间都可以使用-print0 | xags -0,但您可能仍然认为-exec ls是一种更好的方法。

票数 4
EN

Stack Overflow用户

发布于 2014-01-08 00:04:10

您可以使用各种选项来查找(man -printf )

代码语言:javascript
复制
find . -printf "%CY-%Cm-%Cd %CH:%CM\n"
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20976065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档