如何使用 find 命令获取文件

Ano*_*ony 1 find aix

在 AIX 上,如何使用 find 命令仅从当前目录(不包括子目录及其文件)中获取超过一天的文件?

Kus*_*nda 10

假设find您的 Unix 上的实现具有-maxdepth谓词(它是非标准的,但通常可用),以下find命令将执行此操作:

find . -maxdepth 1 -type f -mtime +0
Run Code Online (Sandbox Code Playgroud)

这会将修改时间戳超过 24 小时前的常规文件(即不是目录、套接字、命名管道等)的名称打印到终端。

如果-maxdepth不能使用,则考虑

find . ! -name . -prune -type f -mtime +0 -print
Run Code Online (Sandbox Code Playgroud)

这意味着:

  1. 如果当前find正在查看的不是 .( ! -name .),当前目录,则
  2. find( -prune)的搜索路径中修剪该路径。这find甚至停止考虑进入任何子目录。
  3. 如果事物是​​常规文件 ( -type f),并且
  4. 如果其修改时间戳早于 24 小时 ( -mtime +0),则
  5. 打印我们找到的事物的名称 ( -print)。

关于-mtime +0:在您的 AIX 系统上,请参阅有关 的语义的注释-mtime以确定是否使用-mtime +0-mtime +1。如果你想在UNIX03行为,你应该使用-mtime +0,以找到超过24小时前修改时间戳文件(并设置环境变量XPG_SUS_ENVONXPG_UNIX98OFF,按照手册中与注)。

默认情况下,find输出找到的文件的路径名。这意味着您将从./上述命令中获得文件名。如果您不希望那样,则必须basename为每个找到的文件名调用该实用程序。

你可以这样做:

find . ! -name . -prune -type f -mtime +0 -exec basename {} \;
Run Code Online (Sandbox Code Playgroud)

在评论中你提到你想压缩这些文件。为此,无需调用该basename实用程序。只需调用gzip(或您想使用的任何压缩实用程序):

find . ! -name . -prune -type f -mtime +0 -exec gzip {} +
Run Code Online (Sandbox Code Playgroud)

根据您是否想对这些文件做进一步的处理,您可以在此站点上寻找类似的问题,例如为什么循环查找的输出是不好的做法?

还相关:

  • 评论不用于扩展讨论;此对话已[移至聊天](https://chat.stackexchange.com/rooms/91206/discussion-on-answer-by-kusalananda-how-can-i-get-files-using-find-command) . (2认同)