微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从Perl的ls -lrt输出中查找/剪切文件名

我想从ls -lrt的输出文件名,但我无法find一个文件名。 我使用下面的命令,但它不起作用。

$cmd=' -rw-r--r-- 1 admin u19530 3506 Aug 7 03:34 sla.20120807033424.log'; my $result=`cut -d,-f9 $cmd`; print "The file name is $resultn";

结果是空白的。 我需要文件名sla.20120807033424.log

到目前为止,我已经尝试了下面的代码,它适用于文件名。

#!/usr/bin/perl my $dir = <dir path>; opendir (my $DH,$dir) or die "Error opening $dir: $!"; my %files = map { $_ => (stat("$dir/$_"))[9] } grep(! /^..?$/,readdir($DH)); closedir($DH); my @sorted_files = sort { $files{$b} <=> $files{$a} } (keys %files); print "the file is $sorted_files[0] n";

Linux的 – 如何从一个文件剪切一列,并粘贴到另一个单行命令?

如何用`cut`删除最后一个CR字符

使用cut,colrm,awk和sed的奇怪问题:无法从pipe道stream中剪切字符

如何使用unix脚本显示所有'n'个string的长串?

如何确定我的shellpipe道中最慢的组件?

linux命令行:剪切(带空字段)

如何获得有序列,定义列或除特定列之外或之后的所有列

文件中查找HEX值并grep下面的值

从列X剪切,直到制表符分隔的文件结束

仅打印string中的第一个字段

通过使用-l你正在使自己变得更加困难。 这将做你想要的

print((`ls -brt`)[0]);

但是,除非Perl不能提供你所需要的东西,否则通常最好避免脱壳,这可以很容易地完成

print "$_n" for (sort { -M $a <=> -M $b } glob "*")[0];

use File::Find::Rule qw( ); use File::stat qw( stat ); use List::Util qw( reduce ); my ($oldest) = map $_ ? $_->[0] : undef,# 4. Get rid of stat data. reduce { $a->[1]->mtime < $b->[1]->mtime ? $a : $b } # 3. Find one with oldest mtime. map [ $_,scalar(stat($_)) ],# 2. stat each file. File::Find::Rule # 1. Find relevant files. ->maxdepth(1) # Don't recurse. ->file # Just plain files. ->in('.'); # In whatever dir.

文件::查找::规则

文件::统计

列表::的Util

如果你愿意选择其他的选择,你可以做到这一点,这是不可能的。

顺便说一句,即使没有-l你仍然可以用-rt排序。

另外如果你必须使用ls,你应该使用-b 。

my $cmd = ' -rw-r--r-- 1 admin u19530 3506 Aug 7 03:34 sla.20120807033424.log'; $cmd =~ / ( S+) $/x or die "can't find filename in string " ; my $filename = $1 ; print $filename ;

免责声明 – 这将不起作用,如果文件名有空格,可能在其他情况下。 OP将知道有关文件的命名约定。 我同意有更强大的方法不使用ls -lrt 。

也许是这样的:

ls -lrt *.log | perl -lane 'print $F[-1]'

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐