【问题标题】:List files and timestamp of creation on AIX system (Perl)列出 AIX 系统上的文件和创建时间戳 (Perl)
【发布时间】:2015-08-25 20:21:24
【问题描述】:

我想在 AIX 系统上执行类似 ls -l --time-style="+%s" 的命令。
我只需要文件的时间戳和文件名。

this answer,我做了:

find . -type f -exec perl -le 'print((stat shift)[9])' {} \;

但我找不到用 Perl 打印文件名的方法(我不懂语言,而且单行语法有问题)。
我正在尝试这样的事情:

perl -le 'print((stat shift)[9] . " ???")' foo.txt

谁能帮帮我?

【问题讨论】:

  • 你不需要 Perl 来做这个:find . -type f -printf '%T@ %p\n'。如果您确实使用 Perl,将输出从 find 直接通过管道传输到 perl 会更有效,这样您就不会为每个文件单独调用解释器:find . -type f -print0 | perl -0E 'say((stat)[9] . " $_") while <>'(我认为 -print0 是 GNU 扩展所以你的find 版本可能没有它。)
  • @ThisSuitIsBlackNot 在我的 AIX 7.1 系统上, find 命令上没有 -printf-print0。我不知道是否还有改进的可能......
  • 所以我猜你确实需要 Perl。 -print0 允许您安全地处理包含换行符的文件名;如果你确定你的文件名都不包含换行符,你可以修改我给find . -type f | perl -nlE 'say((stat)[9] . " $_")'的第二个命令@

标签: perl timestamp aix


【解决方案1】:

您正在寻找的是 @ARGV 数组,您可以使用它来循环,并检查 $_ 的当前文件名,

perl -le 'print((stat $_)[9] . " $_") for @ARGV' foo.txt

【讨论】:

  • $_stat() 的默认参数,因此可以省略。
  • 我永远不会理解 Perl 语法。 :-) 谢谢!
  • @pihug12 好的,这相当于你更熟悉的,perl -le 'for my $f (@ARGV) { print((stat $f)[9] . " $f"); }'
猜你喜欢
  • 2013-08-26
  • 2013-09-28
  • 2013-06-29
  • 2015-06-11
  • 1970-01-01
  • 1970-01-01
  • 2021-10-15
  • 2012-08-22
  • 2015-07-04
相关资源
最近更新 更多