如何使用find命令获取文件

如何使用find命令获取文件

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

答案1

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

find . -maxdepth 1 -type f -mtime +0

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

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

find . ! -name . -prune -type f -mtime +0 -print

这意味着:

  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_UNIX98to )。OFF

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

你可以这样做:

find . ! -name . -prune -type f -mtime +0 -exec basename {} \;

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

find . ! -name . -prune -type f -mtime +0 -exec gzip {} +

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

还相关:

相关内容