与SunOS 或 Solaris 上的命令相比find
,Linux 上的命令有很多选项。find
我想使用这样的find
命令:
find data/ -type f -name "temp*" -printf "%TY-%Tm-%Td %f\n" | sort -r
-printf
它在 Linux 机器上工作得非常好,但在SunOS 机器上,相同的命令没有选项。我想以"%TY-%Tm-%Td %f\n"
格式自定义我的输出。
请为 SunOS 提出任何替代方案。
与SunOS 或 Solaris 上的命令相比find
,Linux 上的命令有很多选项。find
我想使用这样的find
命令:
find data/ -type f -name "temp*" -printf "%TY-%Tm-%Td %f\n" | sort -r
-printf
它在 Linux 机器上工作得非常好,但在SunOS 机器上,相同的命令没有选项。我想以"%TY-%Tm-%Td %f\n"
格式自定义我的输出。
请为 SunOS 提出任何替代方案。
请注意,它与 Linux 无关;该
-printf
谓词特定于find
. Linux 不是操作系统,它只是许多操作系统中的内核。虽然过去大多数操作系统都使用 GNU 用户空间,但现在绝大多数使用 Linux 的操作系统都是嵌入式的,并且如果有基本命令的话。早于 Linux的 GNU
find
命令可以安装在大多数类 Unix 操作系统上。在 Linux 出现之前,它肯定在 Solaris(当时称为 SunOS)上使用过。如今,它甚至可以作为 Solaris 的 Oracle 软件包提供。在 Solaris 11 上,它是 in
file/gnu-findutils
,并且命令被命名gfind
(对于 GNUfind
,以将其与系统自己的find
命令区分开来)。现在,如果你不能安装软件包,你最好的选择可能是使用
perl
:在这里,我们仍然使用
find
(Solaris 实现)来查找文件,但我们使用它的-exec
谓词将文件列表传递给perl
. 并在每个上perl
执行 alstat()
以检索文件元数据(包括作为第 10 个元素的修改时间 ($s[9]
)),在本地时区 (localtime()
) 中对其进行解释并对其进行格式化 (strftime()
),然后将其print
与文件名$_
放在一起(如果none 在 中指定perl
,并且$!
等效stderror(errno)
于上一次系统调用失败的错误文本)。另一种方法是使用
find2perl
脚本,它将命令的(这里是一个子集)转换find
为相应的 perl 脚本。perl 脚本使用File::Find
模块来完成繁重的工作。因为我系统上的 find2perl 脚本不支持-printf
谓词,所以我手动添加了它:在我创建的两个示例文件中,输出是相同的: