在 AIX 上如何使用 find 命令仅获取当前目录(不包括子目录及其文件)中早于一天的文件?
答案1
find
假设您的 Unix 上的实现具有-maxdepth
谓词(它是非标准的,但通常可用),则以下find
命令将执行此操作:
find . -maxdepth 1 -type f -mtime +0
这会将修改时间戳超过 24 小时前的常规文件(即不是目录、套接字、命名管道等)的名称打印到终端。
如果-maxdepth
不能使用,则考虑
find . ! -name . -prune -type f -mtime +0 -print
这意味着:
- 如果当前
find
正在查看的是不是.
(! -name .
),当前目录,然后 - 修剪
find
( )的搜索路径中的该路径-prune
。这find
甚至停止考虑到进入任何子目录。 - 如果该文件是常规文件 (
-type f
),并且 - 如果其修改时间戳早于 24 小时 (
-mtime +0
),则 - 打印我们找到的东西的名称 (
-print
)。
关于-mtime +0
:在您的 AIX 系统上,请参阅关于语义的注释-mtime
来确定是否使用-mtime +0
或-mtime +1
。如果您想要 UNIX03 行为,则应该使用-mtime +0
查找修改时间戳超过 24 小时前的文件(并根据手册中的注释将环境变量设置XPG_SUS_ENV
为ON
和XPG_UNIX98
to )。OFF
默认情况下,find
输出路径名找到的文件。这意味着您将从./
上述命令中获得前缀为 的文件名。如果您不希望这样,则必须basename
为每个找到的文件名调用该实用程序。
你可以这样做:
find . ! -name . -prune -type f -mtime +0 -exec basename {} \;
在评论中您提到您想要压缩这些文件。为此,无需调用该basename
实用程序。只需调用gzip
(或任何您想要使用的压缩实用程序)即可:
find . ! -name . -prune -type f -mtime +0 -exec gzip {} +
根据您是否想对这些文件做进一步的操作,您可以在此网站上查找类似的问题,例如为什么循环查找的输出是不好的做法?
还相关: